三台机器

  1. ## 设置 hostnaem
  2. hostnamectl set-hostname master
  3. hostnamectl set-hostname node1
  4. hostnamectl set-hostname node2
  5. # edit the /etc/host
  6. echo '192.168.116.136 master ' >> /etc/hosts
  7. echo '192.168.116.137 node1 ' >> /etc/hosts
  8. echo '192.168.116.130 node2 ' >> /etc/hosts
  9. source /etc/hosts
  10. reboot

pre

  1. yum -y install conntrack ntpdate ntp ipvsadm ipset jq iptables curl sysstat libseccomp wget vim net-tools git
  2. systemctl disable firewalld
  3. systemctl stop firewalld
  4. setenforce 0
  5. setenforce 0
  6. sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
  7. swapoff -a
  8. echo vm.swappiness = 0”>> /etc/sysctl.conf
  9. timedatectl set-timezone Asia/Shanghai
  10. #将当前的UTC时间写入硬件时钟
  11. timedatectl set-local-rtc 0
  12. systemctl restart rsyslog
  13. systemctl restart crond
  14. date
  15. cat <<EOF | tee /etc/sysctl.d/k8s.conf
  16. net.bridge.bridge-nf-call-ip6tables = 1
  17. net.bridge.bridge-nf-call-iptables = 1
  18. EOF
  19. echo "net.bridge.bridge-nf-call-ip6tables = 1" >> /etc/sysctl.conf
  20. echo "net.bridge.bridge-nf-call-iptables = 1" >> /etc/sysctl.conf

docker

  1. ## docker
  2. yum remove docker \
  3. docker-client \
  4. docker-client-latest \
  5. docker-common \
  6. docker-latest \
  7. docker-latest-logrotate \
  8. docker-logrotate \
  9. docker-engine
  10. yum remove containerd.io docker-ce docker-ce-cli
  11. yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
  12. yum-config-manager --add-repo https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo
  13. cd /etc/yum.repos.d/
  14. # yum update -y
  15. yum install -y docker-ce docker-ce-cli
  16. cat <<EOF | tee /etc/docker/daemon.json
  17. {
  18. "exec-opts": ["native.cgroupdriver=systemd"],
  19. "log-driver": "json-file",
  20. "log-opts": {
  21. "max-size": "100m"
  22. },
  23. "storage-driver": "overlay2",
  24. "storage-opts": [
  25. "overlay2.override_kernel_check=true"
  26. ]
  27. }
  28. EOF
  29. mkdir -p /etc/systemd/system/docker.service.d
  30. systemctl enable --now docker
  31. systemctl daemon-reload
  32. systemctl restart docker
  33. docker --version

pre_k8s

  1. ### k8s
  2. cat > /etc/yum.repos.d/kubenetes.repo <<eof
  3. [k8s]
  4. name=k8s
  5. baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
  6. gpgcheck=0
  7. enabled=1
  8. #gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
  9. eof
  10. setenforce 0
  11. sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
  12. yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
  13. systemctl enable --now kubelet
  14. rm /var/lib/kubelet/ -rf
  15. rm /var/lib/etcd/ -rf
  16. # rm /var/lib/docker/* -rf
  17. rm -rf /root/.kube/
  18. kubeadm reset

just_in master

  1. ## master node configuration
  2. swapoff -a
  3. echo vm.swappiness = 0”>> /etc/sysctl.conf
  4. kubeadm init --kubernetes-version=v1.20.4 \
  5. --image-repository registry.aliyuncs.com/google_containers \
  6. --pod-network-cidr=10.244.0.0/16 \
  7. --service-cidr=10.96.0.0/12 \
  8. --ignore-preflight-errors=Swap \
  9. --apiserver-advertise-address=192.168.116.136
  10. mkdir /root/k8s -p
  11. HOME=/root/k8s
  12. mkdir -p $HOME/.kube
  13. sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  14. sudo chown $(id -u):$(id -g) $HOME/.kube/config
  15. export KUBECONFIG=/etc/kubernetes/admin.conf
  16. kubectl get nodes
  17. kubectl get pods -n kube-system
  18. # kubeadm join 192.168.116.136:6443 --token h0pyqy.srd57bbc1i9rlfs7 \
  19. # --discovery-token-ca-cert-hash sha256:a75e758d33031438e6bc581f3ddcf59cb688bbd81c31713b324226ea120a7a92
  20. ### error
  21. # kubectl get cs
  22. # controller-manager Unhealthy Get “http://127.0.0.1:10252/healthz”: dial tcp 127.0.0.1:10252: connect: connection refused
  23. # scheduler Unhealthy Get “http://127.0.0.1:10251/healthz”: dial tcp 127.0.0.1:10251: connect: connection refused
  24. # 解决思路:
  25. # 注释掉/etc/kubernetes/manifests下的kube-controller-manager.yaml和kube-scheduler.yaml的- – port=0。
  26. # 再次查看应该正常了。
  27. # 如还没有,可以重启机器看看。

just for nodes

  1. #### nodes
  2. scp root@192.168.116.136:/etc/kubernetes/admin.conf ./ # password: test
  3. systemctl enable --now kubelet
  4. export KUBECONFIG=./admin.conf
  5. kubectl get nodes
  6. echo '192.168.116.136 master' >> /etc/hosts
  7. echo '192.168.116.137 node1' >> /etc/hosts
  8. echo '192.168.116.130 node02' >> /etc/hosts
  9. echo '185.199.109.133 raw.githubusercontent.com' >> /etc/hosts
  10. echo '185.199.108.133 raw.githubusercontent.com' >> /etc/hosts
  11. echo '185.199.110.133 raw.githubusercontent.com' >> /etc/hosts
  12. echo '185.199.111.133 raw.githubusercontent.com' >> /etc/hosts
  13. echo '185.199.111.133 raw.githubusercontent.com' >> /etc/hosts
  14. wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
  15. kubectl apply -f kube-flannel.yml
  16. systemctl restart kubelet
  17. ### join 失败, 查看下 kubelet 的状态。我们需要 running, 若不running 执行一下. 或者看看 syslog 找原因。
  18. # vim /var/lib/kubelet/kubeadm-flags.env
  19. # KUBELET_KUBEADM_ARGS="--cgroup-driver=systemd --network-plugin=cni --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.2"
  20. swapoff -a
  21. echo vm.swappiness = 0”>> /etc/sysctl.conf
  22. # rm -rf /etc/kubernetes/bootstrap-kubelet.conf /etc/kubernetes/pki/ca.crt /etc/kubernetes/kubelet.conf
  23. kubeadm join 192.168.116.136:6443 --token h0pyqy.srd57bbc1i9rlfs7 \
  24. --discovery-token-ca-cert-hash sha256:a75e758d33031438e6bc581f3ddcf59cb688bbd81c31713b324226ea120a7a92