环境准备,首先我们准备两台服务器,一台为master,一台为node
- 条件准备(所有服务器都执行)
1.1 关闭防火墙
1.2. 关闭selinux,修改/etc/selinux/config
1.3 关闭swap(内存交换)
1.4 hosts文件添加各个服务器主机名(这里使用两台128和129,128为master,129为node)
1.5 配置内核参数,将桥接的IPv4流量传递到iptables的链
# 1.1
systemctl stop firewalld
systemctl disable firewalld
# 1.2
set -i 's/enforcing/disabled' /etc/selinux/config
setenforce 0
# 1.3
swapoff -a #临时
sed -ri 's/.*.swap.*/#&/' /etc/fstab #永久
# 1.4
nano /etc/hosts
192.168.31.128 k8s-node1
192.168.31.129 k8s-node2
# 1.5
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF
sysctl --system
- 安装docker(所有服务器都执行)
# 卸载docker
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engine
# 安装依赖
yum install -y yum-utils \
device-mapper-persistent-data \
lvm2
# 添加yum源
sudo yum-config-manager \
--add-repo \
https://mirrors.ustc.edu.cn/docker-ce/linux/centos/docker-ce.repo
# 安装docker以及docker-cli
sudo yum install -y docker-ce docker-ce-cli containerd.io
# 配置docker阿里云镜像加速并设置开机自启
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://zoo2pivc.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
sudo systemctl enable docker
注:这里配置加速后可能启动不起来,卸载掉docker 然后重新安装
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engine
rm -rf /etc/systemd/system/docker.service.d
rm -rf /var/lib/docker
rm -rf /var/run/docker
rm -rf /etc/docker/daemon.json
参考阿里官网https://developer.aliyun.com/article/29941
,需要进行一下配置
sudo cp -n /lib/systemd/system/docker.service /etc/systemd/system/docker.service
sudo sed -i "s|ExecStart=/usr/bin/docker daemon|ExecStart=/usr/bin/docker daemon --registry-mirror=<your accelerate address>|g" /etc/systemd/system/docker.service
sudo sed -i "s|ExecStart=/usr/bin/dockerd|ExecStart=/usr/bin/dockerd --registry-mirror=<your accelerate address>|g" /etc/systemd/system/docker.service
sudo systemctl daemon-reload
sudo service docker restart
这里把your accelerate address
换成自己的镜像加速地址就可以了,记得去掉<>
sudo cp -n /lib/systemd/system/docker.service /etc/systemd/system/docker.service
sudo sed -i "s|ExecStart=/usr/bin/docker daemon|ExecStart=/usr/bin/docker daemon --registry-mirror=https://zoo2pivc.mirror.aliyuncs.com|g" /etc/systemd/system/docker.service
sudo sed -i "s|ExecStart=/usr/bin/dockerd|ExecStart=/usr/bin/dockerd --registry-mirror=https://zoo2pivc.mirror.aliyuncs.com|g" /etc/systemd/system/docker.service
sudo systemctl daemon-reload
sudo service docker restart
- 配置kubernetes源为阿里的yum源(所有服务器都执行)
cat > /etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
- 安装kubeadm、kubelet和kubectl(所有服务器都执行)
Kubelet负责与其他节点集群通信,并进行本节点Pod和容器生命周期的管理。
Kubeadm是Kubernetes的自动化部署工具,降低了部署难度,提高效率。
Kubectl是Kubernetes集群管理工具。
yum install -y kubelet-1.17.3 kubeadm-1.17.3 kubectl-1.17.3
systemctl enable kubelet
systemctl start kubelet
- 部署k8s-master(128执行)
先执行master_images.sh文件,文件内容为
#!/bin/bash
images=(
kube-apiserver:v1.17.3
kube-proxy:v1.17.3
kube-controller-manager:v1.17.3
kube-scheduler:v1.17.3
coredns:1.6.5
etcd:3.4.3-0
pause:3.1
)
for imageName in ${images[@]}; do
docker pull /google_containers/$imageName
done
这里注意,如果是在windows下面编辑的sh文件,需要执行sed -i 's/\r$//' master_images.sh
,这是因为在Windows下每一行结尾是\n\r,而Linux下则是\n,所以才会有 多出来的\r。否则会报/bin/bash^M: 坏的解释器: 没有那个文件或目录
错误。
master节点初始化,这里的apiserver-advertise-address为当前主机的ip,service和pod用默认就好
kubeadm init \
--apiserver-advertise-address=192.168.31.128 \
--image-repository=/google_containers \
--kubernetes-version=1.17.3 \
--service-cidr=10.1.0.0/16 \
--pod-network-cidr=10.244.0.0/16
然后执行上面提示的三句话,用于使用集群
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
上面还有一句you should now deploy a pod network to the cluster
,即我们需要先部署一个pod网络,具体可以参考官网https://kubernetes.io/docs/concepts/cluster-administration/addons/
,官网里提供了很多种网络,这里我们使用flannel
我们通过yml文件来配置网络,yml文件会在后面给出
# 应用
kubectl apply -f kube-flannel.yml
# 删除网络
kubectl delete -f kube-flannel.yml
运行完等待3分钟,查看所有名称空间的pods,并且flannel已经是运行状态
kubectl get pods --all-namespaces
然后我们执行kubeadm join
命令来添加node,上面的执行命令经过一段时间会过期,我们需要执行kubeadm token create --print-join-command
命令重新生成一个
kubeadm join 192.168.31.128:6443 --token o3h63q.frdnfzr27x8z4fbp --discovery-token-ca-cert-hash sha256:8d17d9c5040554396d49d49d8a04bfe6872869e7806c8a8b5327426f1c9e2b9f
我们将这个命令在129服务器里执行,也就是将129添加到集群里
如果某些原因需要重新执行join语句,则先执行kubeadm reset
添加好以后,可以查看所有节点信息,发现添加完以后有两个节点了,但是我们发现状态为notReady,需要稍等一会
kubectl get nodes
再次查看发现变为ready状态了
执行watch kubectl get pod -n kube-system -o wide
监控pod进度,可就是查看节点状态详情
可以看到全部为running,也就是ready了。
至此集群搭建完毕,如果需要添加节点,则重复1,2,3,4步骤后,再执行kubeadm join
命令即可。