一、环境说明:

集群角色 主机名 IP 组件
控制节点 master01 10.168.1.61 api-server、controller-manager、scheduler、kubelet、etcd、docker、kube-proxy、keepalived、nginx、calico
控制节点 master02 10.168.1.62 api-server、controller-manager、scheduler、kubelet、etcd、docker、kube-proxy、keepalived、nginx、calico
控制节点 master03 10.168.1.63 api-server、controller-manager、scheduler、kubelet、etcd、docker、kube-proxy、keepalived、nginx、calico
工作节点 node01 10.168.1.64 node03 kubelet、kube-proxy、docker、calico、coredns
VIP 10.168.1.65

三、K8S安装
3.1 环境初始化(以下步骤每个节点都要操作)
3.1.1 配置每个节点的主机名

  1. # 在master01上执行如下:
  2. hostnamectl set-hostname master01 && bash
  3. # 在node01上执行如下:
  4. hostnamectl set-hostname node01 && bash
  5. # 在node02上执行如下:
  6. hostnamectl set-hostname node02 && bash
  7. # 在node03上执行如下:
  8. hostnamectl set-hostname node03 && bash

3.1.2 配置主机hosts文件,相互之间通过主机名互相访问
修改每台机器的/etc/hosts文件,增加如下三行:

  1. 172.16.31.156 master01
  2. 172.16.31.159 node01
  3. 172.16.31.160 node02
  4. 172.16.31.161 node03

3.1.3 配置主机之间无密码登录
ssh-keygen #一路回车,不输入密码
把本地生成的密钥文件和私钥文件拷贝到远程主机

  1. ssh-copy-id master01
  2. ssh-copy-id node01
  3. ssh-copy-id node02
  4. ssh-copy-id node03

3.1.4 关闭交换分区swap,提升性能

  1. swapoff -a
  2. sed -i 's/.*swap/#&/' /etc/fstab

3.1.5 修改机器内核参数

  1. modprobe br_netfilter
  2. echo "modprobe br_netfilter" >> /etc/profile
  3. cat > /etc/sysctl.d/k8s.conf <<EOF
  4. net.bridge.bridge-nf-call-ip6tables = 1
  5. net.bridge.bridge-nf-call-iptables = 1
  6. net.ipv4.ip_forward = 1
  7. EOF
  8. sysctl -p /etc/sysctl.d/k8s.conf

3.1.6 关闭防火墙和selinux

  1. systemctl stop firewalld ; systemctl disable firewalld
  2. sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
  3. setenforce 0

3.1.7 配置源
配置base源和docker源为内部源

配置k8s使用外部源(内部源没同步)

  1. cat>>/etc/yum.repos.d/kubernetes.repo<<EOF
  2. [kubernetes]
  3. name=Kubernetes
  4. baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
  5. enabled=1
  6. gpgcheck=0
  7. EOF

3.1.8 配置时间同步
备注:在初始化源的时候时间同步已自动配置,此处不在单独配置

3.1.9 开启IPVS

  1. cat >>/etc/sysconfig/modules/ipvs.modules<<EOF
  2. #!/bin/bash
  3. ipvs_modules="ip_vs ip_vs_lc ip_vs_wlc ip_vs_rr ip_vs_wrr ip_vs_lblc ip_vs_lblcr ip_vs_dh ip_vs_sh ip_vs_nq ip_vs_sed ip_vs_ftp nf_conntrack"
  4. for kernel_module in ${ipvs_modules}; do
  5. /sbin/modinfo -F filename ${kernel_module} > /dev/null 2>&1
  6. if [ 0 -eq 0 ]; then
  7. /sbin/modprobe ${kernel_module}
  8. fi
  9. done
  10. EOF
  11. chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep ip_vs
  12. ip_vs_ftp 13079 0
  13. nf_nat 26583 1 ip_vs_ftp
  14. ip_vs_sed 12519 0
  15. ip_vs_nq 12516 0
  16. ip_vs_sh 12688 0
  17. ip_vs_dh 12688 0

3.1.10 安装软件包

  1. yum install -y ipvsadm wget net-tools nfs-utils vim docker-ce-20.10.* bash-comp* docker-ce-cli-20.10.*

3.1.11 配置docker镜像加速

  1. mkdir /etc/docker
  2. cat<<EOF>>/etc/docker/daemon.json
  3. {
  4. "registry-mirrors":["https://docker.mirrors.ustc.edu.cn"],
  5. "insecure-registries": ["https://harbor.streamcomputing.com"],
  6. "exec-opts":
  7. ["native.cgroupdriver=systemd"]
  8. }
  9. EOF

修改docker文件驱动为systemd,默认为cgroupfs,kubelet默认使用systemd,两者必须一致才可以。

  1. systemctl daemon-reload
  2. systemctl restart docker
  3. systemctl enable docker

3.2 安装
3.2.1 安装初始化k8s需要的软件包(所有节点都要安装)

  1. yum install -y kubelet-1.23.6 kubeadm-1.23.6 kubectl-1.23.6
  1. systemctl enable kubelet && systemctl start kubelet

3.2.3 kubeadm初始化k8s集群(指在master节点操作)
在master1上创建kubeadm-config.yaml文件:

  1. vim kubeadm-config.yaml
  2. apiVersion: kubeadm.k8s.io/v1beta2
  3. kind: ClusterConfiguration
  4. kubernetesVersion: v1.23.6
  5. controlPlaneEndpoint: 172.16.31.155:16443
  6. imageRepository: registry.aliyuncs.com/google_containers
  7. apiServer:
  8. certSANs:
  9. - 172.16.31.156
  10. - 172.16.31.159
  11. - 172.16.31.160
  12. - 172.16.31.161
  13. - 172.16.31.155
  14. networking:
  15. podSubnet: 10.244.0.0/16
  16. serviceSubnet: 10.10.0.0/16
  17. ---
  18. apiVersion: kubeproxy.config.k8s.io/v1alpha1
  19. kind: KubeProxyConfiguration
  20. mode: ipvs

3.2.4 初始化k8s集群

  1. kubeadm init --config kubeadm-config.yaml --image-repository registry.aliyuncs.com/google_containers

没有报错才安装成功

配置kubectl的配置文件config,相当于对kubectl进行授权,这样kubectl命令可以使用这个证书对k8s集群进行管理

  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

3.2.5 加入node节点
看加入节点的命令:

  1. kubeadm token create --print-join-command

在node节点上运行如下命令加入集群节点

  1. kubeadm join 172.16.31.155:16443 --token o8z030.r3f2sdxeoxfh0zi8 --discovery-token-ca-cert-hash sha256:9f21a3ef77d1c00ea67594d50d9980d4c2085ba8dfd3d139cc4cbb4fb61df52a

没有报错则加入成功

此时看看节点状态

  1. kubectl get nodes
  2. NAME STATUS ROLES AGE VERSION
  3. master01 NotReady control-plane,master 53m v1.23.6
  4. node01 NotReady <none> 59s v1.23.6
  5. node02 NotReady <none> 59s v1.23.6
  6. node03 NotReady <none> 59s v1.23.6

3.2.6 安装calico网络组件

  1. kubectl apply -f https://git.cnbugs.com/kubernetes/other/raw/branch/ddpss/calico.yaml

再次查看节点状态

文档更新时间: 2023-03-30 09:10   作者:admin