前言
首次安装Kubernetes我们采用kubeadm来安装单Master节点的方式,安装最新版的Kubernetes和Calico,一步一步循序渐进。
介绍
Master:集群控制管理节点,所有的命令都经由master处理。
Worker:是kubernetes集群的工作负载节点。Master为其分配工作,当某个Node宕机时,Master会将其工作负载自动转移到其他节点。
服务器配置说明
192.168.190.10 master1 4核CPU、8G内存、100G磁盘 192.168.190.11 node1 8核CPU、48G内存、400G磁盘 192.168.190.12 node2 8核CPU、48G内存、400G磁盘 192.168.190.13 node3 8核CPU、48G内存、400G磁盘
安装的软件
系统:CentOS Linux release 7.7.1908 内核:Linux master1 5.3.0-1.el7.elrepo.x86_64 软件:Kubernetes 1.16.2 网络:Calico 3.10.0 容器:docker 18.09.9
初始化系统(需要在所有机器执行)
1. #修改系统内核参数
2. cat <<EOF > /etc/sysctl.d/k8s.conf
3. net.ipv4.ip_forward = 1
4. net.bridge.bridge-nf-call-ip6tables = 1
5. net.bridge.bridge-nf-call-iptables = 1
6. EOF
7. sysctl --system
8. #关闭selinux
9. setenforce 0
10. sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
11. #禁止firewalld
12. systemctl stop firewalld
13. systemctl disable firewalld
14. #注意不要创建交换分区
15. swapoff -a
安装docker(需要在所有机器执行)
1. #安装依赖的组件
2. yum install -y yum-utils nfs-utils device-mapper-persistent-data lvm2
3. #添加docker 阿里云的仓库,加速下载
4. yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
5. #查看docker的所有版本
6. yum list docker-ce --showduplicates | sort -r
7. #官方文档建议支持最高的docker版本为18.09.x,所以安装该版本
8. yum install -y docker-ce-18.09.9 docker-ce-cli-18.09.9 containerd.io
9. #官方文档建议的docker配置:cgroupdriver=systemd,可提高稳定性。修改使用国内docker源
10. mkdir /etc/docker
11. cat > /etc/docker/daemon.json <<EOF
12. {
13. "registry-mirrors": ["https://registry.docker-cn.com"],
14. "exec-opts": ["native.cgroupdriver=systemd"],
15. "log-driver": "json-file",
16. "log-opts": {
17. "max-size": "100m"
18. },
19. "storage-driver": "overlay2",
20. "storage-opts": [
21. "overlay2.override_kernel_check=true"
22. ]
23. }
24. EOF
25. systemctl restart docker
26. systemctl enable docker
27. #参考官方文档:https://kubernetes.io/docs/setup/production-environment/container-runtimes/#docker
安装kubelet kubeadm kubectl(需要在所有机器执行)
1. #使用阿里云kubernetes源
2. cat <<EOF > /etc/yum.repos.d/kubernetes.repo
3. [kubernetes]
4. name=Kubernetes
5. baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
6. enabled=1
7. gpgcheck=0
8. repo_gpgcheck=0
9. gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
10. http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
11. EOF
12. 按最新版的组件
13. yum install -y kubelet-1.16.2 kubeadm-1.16.2 kubectl-1.16.2
14. systemctl start kubelet
15. systemctl enable kubelet
16. #注意:kubelet会启动失败,需要在 kubeadm init 的操作后,kubelet 才能正常启动。
初始化 master 节点(仅在master节点执行)
1. #设置变量
2. #APISERVER_NAME 不能是 master 的 hostname
3. export APISERVER_NAME=apiserver
4. export MASTER_IP=192.168.190.10
5. #POD_SUBNET为容器组所在的网段,不能与master节点worker节点所在的网段重叠
6. export POD_SUBNET=10.66.0.1/16
7. echo "${MASTER_IP} ${APISERVER_NAME}" >> /etc/hosts
8. #创建kubeadm的配置文件,使用阿里云的镜像源
9. cat <<EOF >kubeadm-config.yaml
10. apiVersion: kubeadm.k8s.io/v1beta2
11. kind: ClusterConfiguration
12. kubernetesVersion: v1.16.2
13. imageRepository: registry.cn-hangzhou.aliyuncs.com/google_containers
14. controlPlaneEndpoint: "${APISERVER_NAME}:6443"
15. networking:
16. serviceSubnet: "10.96.0.0/16"
17. podSubnet: "${POD_SUBNET}"
18. dnsDomain: "cluster.local"
19. EOF
20. #安装master节点,根据您服务器网速的情况,您需要等候 3 - 10 分钟
21. kubeadm init --config=kubeadm-config.yaml --upload-certs
22. #配置 kubectl
23. rm -rf /root/.kube/
24. mkdir /root/.kube/
25. cp -i /etc/kubernetes/admin.conf /root/.kube/config
26. # 安装 calico 网络插件
27. wget https://docs.projectcalico.org/v3.10/manifests/calico.yaml --no-check-certificate
28. sed -i "s#192\.168\.0\.0/16#${POD_SUBNET}#" calico.yaml
29. kubectl apply -f calico.yaml
检查master节点安装状况(仅在master节点执行)
-
#注意:在没安装worker节点前,calico-kube-controllers,calico-node,2个coredns 这4个pod不是Running状态是正常的,其它pod需要是Running状态。
-
watch kubectl get pod -n kube-system -o wide
-
#查看 master 节点初始化结果
-
kubectl get nodes -o wide
-
#获取worker节点执行kubeadm join的命令及参数
-
kubeadm token create --print-join-command
初始化所有的worker节点(仅在worker节点执行)
1. export MASTER_IP=192.168.190.10
2. export APISERVER_NAME=apiserver
3. echo "${MASTER_IP} ${APISERVER_NAME}" >> /etc/hosts
4. #把在master节点获取的命令复制到worker节点执行
5. kubeadm join apiserver:6443 --token ewlmyi.wu8u8f2a0ffypuur --discovery-token-ca-cert-hash sha256:42c1c2d45f9b21d918ee7fd40acf6f7eaf595ca925d54271dbe0fd31ae75ce8d
检查是否全部安装完成(仅在master节点执行)
1. #必须所有pod都是Running状态才安装成功。
2. watch kubectl get pod -n kube-system -o wide
3. kubectl get nodes -o wide
删除worker节点
1. #只在 worker 节点执行
2. kubeadm reset
3. #只在 master 节点执行
4. kubectl delete node node1
5. #如果需要重新初始化 master 节点,请在master节点执行 kubeadm reset 操作。