系统配置

  1. master1 192.168.75.161
  2. master2 192.168.75.162
  3. master3 192.168.75.163
  4. node1 192.168.75.164
  5. node2 192.168.75.165
  6. node3 192.168.75.166
  7. VIP 192.168.75.160
  8. VIP PORT 6444

系统初始化

关闭防火墙
  1. $ systemctl stop firewalld
  2. $ systemctl disable firewalld

关闭 selinux
  1. $ sed -i 's/enforcing/disabled/' /etc/selinux/config # 永久
  2. $ setenforce 0 # 临时

关闭 swap
  1. $ swapoff -a # 临时
  2. $ vim /etc/fstab # 永久 注释swap

主机名
  1. $ hostnamectl set-hostname <hostname>

master 添加 hosts
  1. $ cat >> /etc/hosts << EOF
  2. 192.168.75.161 k8s-m1
  3. 192.168.75.162 k8s-m2
  4. 192.168.75.163 k8s-m3
  5. 192.168.75.164 k8s-w1
  6. 192.168.75.165 k8s-w2
  7. 192.168.75.166 k8s-w3
  8. EOF

将桥接的 IPv4 流量传递到 iptables 的链
  1. $ cat > /etc/sysctl.d/k8s.conf << EOF
  2. net.bridge.bridge-nf-call-ip6tables = 1
  3. net.bridge.bridge-nf-call-iptables = 1
  4. EOF
  5. $ sysctl --system # 生效

时间同步
  1. $ yum install ntpdate -y
  2. $ ntpdate time.windows.com

所有节点安装 Docker/kubeadm/kubelet

安装docker
  1. $ wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O
  2. /etc/yum.repos.d/docker-ce.repo
  3. $ yum -y install docker-ce-18.06.1.ce-3.el7
  4. $ systemctl enable docker && systemctl start docker
  5. $ docker --version

添加阿里云 YUM 软件源
  1. #设置仓库地址
  2. # cat > /etc/docker/daemon.json << EOF
  3. {
  4. "registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"]
  5. }
  6. EOF
  7. #添加 yum 源
  8. $ cat > /etc/yum.repos.d/kubernetes.repo << EOF
  9. [kubernetes]
  10. name=Kubernetes
  11. baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
  12. enabled=1
  13. gpgcheck=0
  14. repo_gpgcheck=0
  15. gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
  16. https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
  17. EOF

安装 kubeadm, kubelet 和 kubectl
  1. $ yum install -y kubelet-1.19.0 kubeadm-1.19.0 kubectl-1.19.0
  2. $ systemctl enable kubelet
  3. #备注
  4. #搜索版本
  5. yum list kubelet kubeadm kubectl --showduplicates|sort -r
  6. #卸载
  7. yum erase -y kubelet kubectl kubeadm

部署keepalived

  1. 参考keepalived yum安装手册

部署haproxy

  1. 参考haproxy安装手册

部署 Kubernetes Master

在master上执行
  1. kubeadm init \
  2. --control-plane-endpoint 192.168.75.160:6444 \
  3. --upload-certs \
  4. --image-repository registry.aliyuncs.com/google_containers \
  5. --kubernetes-version v1.19.0 \
  6. --pod-network-cidr 10.244.0.0/16

使用 kubectl 工具
  1. mkdir -p $HOME/.kube
  2. sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  3. sudo chown $(id -u):$(id -g) $HOME/.kube/config

部署 Kubernetes Worker

  1. kubeadm join 192.168.75.160:6444 --token rsai58.yro11chey8qetgr6 \
  2. --discovery-token-ca-cert-hash sha256:8fbc37be2c0807bef6df199e66387ce81f4d1a2cfd2c351e00e65401486a8c5e \
  3. --control-plane --certificate-key fc9b86b166ca5275501138b6855466c4e0627e728e2a6af2a0e4b28c2ee3b0b8

安装网络插件flannel

  1. kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

测试kubernetes集群

  1. #在 Kubernetes 集群中创建一个 pod, 验证是否正常运行
  2. $ kubectl create deployment nginx --image=nginx
  3. $ kubectl expose deployment nginx --port=80 --type=NodePort
  4. $ kubectl get pod,svc
  5. #访问地址: http://NodeIP:Port

安装kuboard

  1. #安装
  2. kubectl apply -f https://kuboard.cn/install-script/kuboard.yaml
  3. #查看状态
  4. kubectl get pods -l k8s.eip.work/name=kuboard -n kube-system
  5. #获取token
  6. kubectl -n kube-system get secret $(kubectl -n kube-system get secret | grep kuboard-user | awk '{print $1}') -o go-template='{{.data.token}}' | base64 -d
  7. #参考
  8. https://www.cnblogs.com/xiao987334176/p/12060855.html

k8s防火墙配置

  1. #查看防火墙状态
  2. systemctl status firewalld.service
  3. #开启防火墙
  4. systemctl start firewalld.service
  5. #关闭防火墙
  6. systemctl stop firewalld.service
  7. #重启防火墙
  8. systemctl restart firewalld.service
  9. #禁止防火墙开机启动
  10. systemctl disable firewalld.service
  11. #查看已经开放的端口
  12. firewall-cmd --list-ports
  13. #k8s master需要开放的端口
  14. firewall-cmd --permanent --add-port=6444/tcp #vip负载均衡端口
  15. firewall-cmd --permanent --add-port=6443/tcp
  16. firewall-cmd --permanent --add-port=2379-2380/tcp
  17. firewall-cmd --permanent --add-port=10250/tcp
  18. firewall-cmd --permanent --add-port=10251/tcp
  19. firewall-cmd --permanent --add-port=10252/tcp
  20. firewall-cmd --permanent --add-port=10255/tcp
  21. firewall-cmd --permanent --add-port=8472/udp
  22. firewall-cmd --permanent --add-port=443/udp
  23. firewall-cmd --permanent --add-port=53/udp
  24. firewall-cmd --permanent --add-port=53/tcp
  25. firewall-cmd --permanent --add-port=9153/tcp
  26. firewall-cmd --add-masquerade --permanent
  27. # only if you want NodePorts exposed on control plane IP as well
  28. firewall-cmd --permanent --add-port=30000-32767/tcp
  29. systemctl restart firewalld.service
  30. #k8s worker需要开放的端口
  31. firewall-cmd --permanent --add-port=10250/tcp
  32. firewall-cmd --permanent --add-port=10255/tcp
  33. firewall-cmd --permanent --add-port=8472/udp
  34. firewall-cmd --permanent --add-port=443/udp
  35. firewall-cmd --permanent --add-port=30000-32767/tcp
  36. firewall-cmd --permanent --add-port=53/udp
  37. firewall-cmd --permanent --add-port=53/tcp
  38. firewall-cmd --permanent --add-port=9153/tcp
  39. firewall-cmd --add-masquerade --permanent
  40. systemctl restart firewalld.service

kubeadm初始化

  1. kubeadm reset

查看dashboard的token

  1. kubectl -n kube-system describe $(kubectl -n kube-system get secret -n kube-system -o name | grep namespace) | grep token

证书过期问题解决

  1. #检查客户端证书过期时间
  2. kubeadm alpha certs check-expiration
  3. [check-expiration] Reading configuration from the cluster...
  4. [check-expiration] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -oyaml'
  5. CERTIFICATE EXPIRES RESIDUAL TIME CERTIFICATE AUTHORITY EXTERNALLY MANAGED
  6. admin.conf Jun 01, 2021 00:41 UTC 295d no
  7. apiserver Jun 01, 2021 00:41 UTC 295d ca no
  8. apiserver-etcd-client Jun 01, 2021 00:41 UTC 295d etcd-ca no
  9. apiserver-kubelet-client Jun 01, 2021 00:41 UTC 295d ca no
  10. controller-manager.conf Jun 01, 2021 00:41 UTC 295d no
  11. etcd-healthcheck-client Jun 01, 2021 00:41 UTC 295d etcd-ca no
  12. etcd-peer Jun 01, 2021 00:41 UTC 295d etcd-ca no
  13. etcd-server Jun 01, 2021 00:41 UTC 295d etcd-ca no
  14. front-proxy-client Jun 01, 2021 00:41 UTC 295d front-proxy-ca no
  15. scheduler.conf Jun 01, 2021 00:41 UTC 295d no
  16. CERTIFICATE AUTHORITY EXPIRES RESIDUAL TIME EXTERNALLY MANAGED
  17. ca May 30, 2030 00:41 UTC 9y no
  18. etcd-ca May 30, 2030 00:41 UTC 9y no
  19. front-proxy-ca May 30, 2030 00:41 UTC 9y no
  20. #续签所有证书(master执行)
  21. kubeadm alpha certs renew all
  22. cp /etc/kubernetes/admin.conf /root/.kube/config
  23. #续签之后,重启master相关服务:kube-apiserver-k8s-master & kube-controller-manager-k8s-master & kube-scheduler-k8s-master
  24. 或者将/etc/kubernetes/manifests 文件夹重命名,等一会再改回去,上述pod也会重新构建
  25. #参考
  26. https://leif.fun/articles/2020/08/09/1596949888243.html

修改kubernetes的service服务类型nodeport端口范围

  1. #编辑kube-apiserver.yaml文件
  2. vim /etc/kubernetes/manifests/kube-apiserver.yaml
  3. #增加kube-apiserver的启动选项
  4. --service-node-port-range=1-65535
  5. #重启kube-apiserver
  6. systemctl daemon-reload
  7. systemctl restart kube-apiserver
  8. #重启kubelet
  9. systemctl daemon-reload
  10. systemctl restart kubelet