1.写在前面
用过一段时间的k8s集群部署后,心血来潮自己租了两台阿里云服务器来搭建k8s集群并部署一些docker上去。其中参考了很多网上的教程,都是参差不齐、东拼西凑的,从而也走了很多弯路,但是服务器是自己租的大不了重装系统重新部署😇,废话不多说直接上干货。
2.准备工作
服务器:阿里云2核4g(不能低于2核2g)
操作系统:CentOS7.8
部署规划
121.40.124.240 k8s-master
121.40.124.230 k8s-node01
3.关闭防火墙、selinux、swap命令
systemctl stop firewalld
setenforce 0
swapoff -a
4.添加主机名与IP对应的关系
vim /etc/hosts
172.24.228.45 k8s-master
172.24.229.33 k8s-node01
注意阿里云服务器配置hosts的ip地址用内网ip
5.将桥接的IPV4流量传递到iptables的链
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
6.安装docker
- 安装docker
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O/etc/yum.repos.d/docker-ce.repo
yum -y install docker-ce
- 设置docker服务开机自启
systemctl enable docker
systemctl start docker
- 查看版本号
7.添加阿里云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=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
8.安装kubeadm、kubelet和kubectl
这里最好指定版本号来安装,不然会发生组件版本不兼容的情况
yum makecache fast
yum install -y kubelet-1.17.9 kubeadm-1.17.9 kubectl-1.17.9 --nogpgcheck
9.部署Kubernetes Master
- 初始化kubeadm
apiserver-advertise-address改为自己master节点ip,初始化过程稍长需要等待
kubeadm init --apiserver-advertise-address=172.24.228.45 --image-repository /google_containers --kubernetes-version v1.17.9 --service-cidr=10.1.0.0/16 --pod-network-cidr=10.244.0.0/16
当出现Your Kubernetes control-plane has initialized successfully! 这行提示表示初始化成功,并记录下这行语句下面的命令进行执行
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
export KUBECONFIG=/etc/kubernetes/admin.conf
最后还会有两行命令需要拿小本本记录下来,是需要后面在子节点服务上面执行,为master添加节点
kubeadm join 172.24.228.45:6443 --token rgdiu8.ak5o5hdcuec36qk1 \
--discovery-token-ca-cert-hash sha256:912bd3abf667dee7f0eb43dbcb5b361c98ebf662eee932e9a9d4202d0ed3216a
- 现在就可以使用kubectl命令了,这是运行状态的截图,这步的状态应该是NotReady状态
执行kubectl get pods -n kube-system命令可以看到前两个coredns组件的状态都是pending,这是因为还没有安装flannel网络组件
10.安装flannel
- 执行下面命令下载kube-flannel.yml文件
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
无法下载的去github上面去clone下来上传到自己服务器上,👉kube-flannel.yml文件
- 修改kube-flannel.yml文件两处拉取镜像的地方,改为quay.io/coreos/flannel:v0.14.0-amd64
- 执行yml脚本
kubectl apply -f kube-flannel.yml
- 查看是否部署成功,使用命令kubectl get pods -n kube-system
- 再次执行kubectl get node发现master节点状态是Ready
- 如果安装失败了可以使用命令kubeadm reset来清理环境重新初始化
至此,master节点k8s集群部署完成
11.Node节点加入集群
node节点服务器上执行1-8步,然后执行第9步让你小本本记录的那条添加节点的命令
kubeadm join 172.24.228.45:6443 --token rgdiu8.ak5o5hdcuec36qk1 \
--discovery-token-ca-cert-hash sha256:912bd3abf667dee7f0eb43dbcb5b361c98ebf662eee932e9a9d4202d0ed3216a
如果你没有记录,使用下面命令在master节点服务器上重新生成
kubeadm token list
kubeadm token create
发现节点部署到k8s集群
12. 测试k8s集群
执行kubectl get pod,svc -o wide 命令查看nginx端口号
通过浏览器可正常访问ng:http://121.40.124.240:32187/
13.部署dashboard
网上有很多k8s配置dashboard的教程,也很简单,这里就不啰嗦了😄
14.问题
node节点NotReady状态,重启node节点:systemctl start kubelet