k8s集群搭建
一、环境准备
1.检查系统版本
cat /etc/redhat-release
![](https://img.haomeiwen.com/i4807654/6606a96ee1de1f32.png)
2.配置host解析:
编辑 /etc/hosts文件
192.168.112.100 master
192.168.112.101 node1
192.168.112.102 node2
![](https://img.haomeiwen.com/i4807654/90c20db09b088616.png)
验证是否配置成功
ping master
ping node1
ping node2
![](https://img.haomeiwen.com/i4807654/abe8bda3a53a0c0e.png)
3.时间同步
k8s要求集群节点时间必须一致。
设置
systemctl start chronyd
- 设置为开机自启动:
systemctl enable chronyd
验证是否成功 date
![](https://img.haomeiwen.com/i4807654/dc4b3cfaef79fe9b.png)
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
![](https://img.haomeiwen.com/i4807654/987ac3ee20e29620.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
![](https://img.haomeiwen.com/i4807654/4c7cf1df8dfc3c86.png)
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
![](https://img.haomeiwen.com/i4807654/68aff9064f0011b7.png)
9.重启三台机器
reboot
二、安装docker
1.切换镜像源
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
![](https://img.haomeiwen.com/i4807654/b3e6d5f2debcd110.png)
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
![](https://img.haomeiwen.com/i4807654/d8da63cf9fcb1308.png)
5.启动docker
systemctl restart docker
systemctl enable docker
![](https://img.haomeiwen.com/i4807654/25ceeedf8097da72.png)
6.检查docker状态和版本
docker version
![](https://img.haomeiwen.com/i4807654/60f16ae76f919096.png)
三、安装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
![](https://img.haomeiwen.com/i4807654/dccc92fad22835fe.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
![](https://img.haomeiwen.com/i4807654/b0451625da233b8b.png)
3.查看
docker images
![](https://img.haomeiwen.com/i4807654/4d9effdb5ad4da30.png)
五、集群初始化
对集群进行初始化,并将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
![](https://img.haomeiwen.com/i4807654/5cd4d8eff852a784.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
![](https://img.haomeiwen.com/i4807654/6fcd68b7cd2b73e0.png)
在master节点中查看集群所有节点:
![](https://img.haomeiwen.com/i4807654/f114cd6629d9d742.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
![](https://img.haomeiwen.com/i4807654/dc848262d13129e7.png)
七、服务部署
在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
![](https://img.haomeiwen.com/i4807654/8fb5ceaef3ca14a1.png)
4.访问部署的nginx服务
http://192.168.108.102:31387/
![](https://img.haomeiwen.com/i4807654/342736f336166417.png)