k8s集群搭建
一、环境准备
1.检查系统版本
cat /etc/redhat-release
2.配置host解析:
编辑 /etc/hosts文件
192.168.112.100 master
192.168.112.101 node1
192.168.112.102 node2
image.png
验证是否配置成功
ping master
ping node1
ping node2
image.png
3.时间同步
k8s要求集群节点时间必须一致。
设置
systemctl start chronyd
- 设置为开机自启动:
systemctl enable chronyd
验证是否成功 date
4.禁用iptables和firewalld服务
k8s和docker在运行中会产生大量的iptables规则,为了不让系统规则与其混淆,直接关闭系统的规则:
关闭firewalld
systemctl stop firewalld
systemctl disable firewalld
关闭iptables
systemctl stop iptables
-
systemctl disable iptables
image.png
5.禁用selinux
selinux是linux系统的安全服务,不关闭可能会产生一系列问题。
编辑 /etc/selinux/config文件 ,修改SELINUX=disabled
- 永久关闭selinux,需要重启
- 临时关闭selinux,重启之后,无效:
setenforce 0
- 查看selinux是否开启:
getenforce
image.png
6.关闭swap分区
swap分区指的是虚拟内存分区,作用是在物理内存使用完之后,将磁盘空间虚拟成内存来使用启用swap设备会对系统的性能产生非常负面的影响,因此kubernetes要求每个节点都要禁用swap设备,但是如果因为某些原因确实不能关闭swap分区,就需要在集群安装过程中通过明确的参数进行配置说明。
- 编辑分区配置文件
/etc/fstab
,注释掉swap分区(修改后需重启):# /dev/mapper/centos-swap
- 临时关闭swap分区,重启之后,无效:
swapoff -a
image.png
7.修改linux内核参数
修改linux的内核参数,添加网桥过滤和地址转发功能
- 编辑/etc/sysctl.d/kubernetes.conf文件,添加如下配器
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
- 重新加载配器
sysctl -p
- 加载网桥过滤模块
modprobe br_netfilter
- 查看网桥过模块是否加载成功
lsmod | grep br_netfilter
8.配置ipvs
在kubernetes中service有两种代理模型:
- 基于iptables
- 基于ipvs
两者比较的话,ipvs的性能要高一些,但是如果要使用它,需要手动载入ipvs模块
- 在每个节点安装ipset和ipvsadm:
yum -y install ipset ipvsadmin
- 在所有节点执行如下脚本:
cat <<EOF > /etc/sysconfig/modules/ipvs.modules
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack_ipv4
EOF
- 添加执行权限:
chmod +x /etc/sysconfig/modules/ipvs.modules
- 执行脚本:
bin bash /etc/sysconfig/modules/ipvs.modules
- 检查是否加载:
lsmod | grep -e ip_vs -e nf_conntrack_ipv4
9.重启三台机器
reboot
二、安装docker
1.切换镜像源
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
2.查看当前镜像源中支持的docker版本
yum list docker -ce --showduplicates
3.安装特定版本的docker-ce
yum install --setopt-obsoletes=0 docker-ce-18.06.3.ce-3.el7 -y
4.添加配置文件
Docker在默认情况下使用的Cgroup Driver为cgroupfs,而kubernetes推荐使用systemd来代替cgroupfs
mkdir /etc/docker
cat <<EOF > /etc/docker/daemon.json
{
"exec-opts": ["native.cgroupdriver=systemd"],
"registry-mirrors": ["https://kn0t2bca.mirror.aliyuncs.com"]
}
EOF
image.png
5.启动docker
systemctl restart docker
systemctl enable docker
6.检查docker状态和版本
docker version
三、安装kubernetes组件
1.切换成国内的镜像源
编辑/etc/yum.repos.d/kubernetes.repo,添加下面的配置 :
[kubernetes]
name=Kubernetes
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
2. 安装kubeadm、kubelet和kubectl
yum install --setopt=obsoletes=0 kubeadm-1.17.4-0 kubelet-1.17.4-0 kubectl-1.17.4-0 -y
3. 配置kubelet的cgroup
编辑/etc/sysconfig/kubelet,添加下面的配置
KUBELET_CGROUP_ARGS="--cgroup-driver=systemd"
KUBE_PROXY_MODE="ipvs"
4.设置kubelet开机自启
systemctl enable kubelet
image.png
四、准备集群镜像
查看镜像:kubeadm config images list
下载镜像
1.定义镜像
images=(
kube-apiserver:v1.17.4
kube-controller-manager:v1.17.4
kube-scheduler:v1.17.4
kube-proxy:v1.17.4
pause:3.1
etcd:3.4.3-0
coredns:1.6.5
)
2.循环执行
for imageName in ${images[@]} ; do
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName k8s.gcr.io/$imageName
docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName
done
image.png
3.查看
docker images
五、集群初始化
对集群进行初始化,并将node节点加入到集群中。
在master中执行:
1.创建集群:
[root@master ~]# kubeadm init \
--kubernetes-version=v1.17.4 \
--pod-network-cidr=10.244.0.0/16 \
--service-cidr=10.96.0.0/12 \
--apiserver-advertise-address=192.168.108.100
image.png
2.创建必要文件
[root@master ~]# mkdir -p $HOME/.kube
[root@master ~]# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[root@master ~]# sudo chown $(id -u):$(id -g) $HOME/.kube/config
3.节点加入集群
在要加入这个集群的节点中执行
kubeadm join 192.168.108.100:6443 --token uj1ggl.9as18bj9m7z7k5pm \
--discovery-token-ca-cert-hash sha256:1fe8d18cf15a7aa17796048c195d1b58f1743dba1de33266f41ae74f25f68c7f
image.png
在master节点中查看集群所有节点:
image.png
六、安装网络插件
1.获取fannel的配置文件
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
2.使用配置文件启动fannel
kubectl apply -f kube-flannel.yml
kubernetes支持多种网络插件,比如flannel、calico、canal等等,任选一种使用即可
3.查看集群节点的状态
kubectl get nodes
七、服务部署
在kubernetes集群中部署一个nginx程序,测试下集群是否在正常工作
1. 部署nginx
kubectl create deployment nginx --image=nginx:1.14-alpine
2.暴露端口
kubectl expose deployment nginx --port=80 --type=NodePort
3. 查看服务状态
kubectl get pods,service
4.访问部署的nginx服务
http://192.168.108.102:31387/
image.png