用于快速创建Kubernetes 集群的工具。

准备工作

机器

一主两从集群,系统 CentOS7.9

机器角色 IP
master 192.168.100.58
node 192.168.100.59
node 192.168.100.60

配置 host

三台机器均设置/配置 host, /etc/hosts文件添加配置:

  1. # 设置各自的 hostname
  2. hostnamectl set-hostname k8s-master01 --100.58
  3. hostnamectl set-hostname k8s-node01 --100.59
  4. hostnamectl set-hostname k8s-node02 --100.60
  5. # 添加配置
  6. 192.168.100.58 k8s-master01
  7. 192.168.100.59 k8s-node01
  8. 192.168.100.60 k8s-node02

关闭防火墙

  1. # 关闭
  2. systemctl stop firewalld
  3. # 禁止开机启动
  4. systemctl disable firewalld
  5. # 查看状态
  6. systemctl status firewalld

关闭 selinux

  1. # 永久 需要重启
  2. sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
  3. # 临时
  4. setenforce 0

关闭 Swap

如果要启用 swap 设备,需要在集群初始化时添加 —ignore-preflight-error=swap,用来忽略因为 swap 设备导致的报错

  1. # 永久
  2. sed -i 's/^[^#].*swap/#&/' /etc/fstab
  3. # 临时
  4. swapoff -a

关闭 ipv6

  1. echo net.ipv6.conf.all.disable_ipv6=1 >> /etc/sysctl.conf
  2. echo NETWORKING_IPV6=no >> /etc/sysconfig/network
  3. sed -i 's/IPV6INIT=yes/IPV6INIT=no/g' /etc/sysconfig/network-scripts/ifcfg-ens33
  4. sysctl -p
  5. # 查看 ipv6 是否关闭
  6. ip a

将桥接的 IPv4 流量传递到 iptables

net.bridge.bridge-nf-call-ip6tables 参数作用

  1. cat >>/etc/sysctl.d/kubernetes.conf<<EOF
  2. net.bridge.bridge-nf-call-ip6tables = 1
  3. net.bridge.bridge-nf-call-iptables = 1
  4. EOF
  5. # 生效
  6. sysctl --system

master 机器设置免密登录 node

  1. # 一路默认回车
  2. ssh-keygen -t rsa
  3. ssh-copy-id k8s-master01
  4. ssh-copy-id k8s-node01
  5. ssh-copy-id k8s-node02
  6. # 测试是否成功
  7. ssh root@k8s-node01

Docker 安装

三台机器都要安装 docker 环境,并需要配置 docker 的 Cgropu Driver 为 systemd:

  1. yum install -y yum-utils device-mapper-persistent-data lvm2
  2. yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
  3. yum install -y docker-ce-19.03.12
  4. # 设置开机自启并启动
  5. systemctl enable --now docker

修改 docker 配置

insecure-registries 参数说明

  1. cat >> /etc/docker/daemon.json<<EOF
  2. {
  3. "exec-opts": ["native.cgroupdriver=systemd"],
  4. "registry-mirrors": ["https://cnxi5446.mirror.aliyuncs.com"],
  5. "insecure-registries": [
  6. "192.168.100.50:8082"
  7. ]
  8. }
  9. EOF
  10. # 重启生效
  11. systemctl daemon-reload
  12. systemctl restart docker

集群部署

安装 kubeadm、kubelet、kubectl

  • 添加阿里云 yum 源

    1. cat <<EOF > /etc/yum.repos.d/kubernetes.repo
    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. repo_gpgcheck=0
    8. gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
    9. EOF
  • 版本安装,当前安装 1.19.8 版本,1.20 不再把 docker 作为默认的容器运行

    1. yum install -y kubelet-1.19.8 kubeadm-1.19.8 kubectl-1.19.8
    2. systemctl enable kubelet

    Master 节点安装

    kubeadm init初始化有问题可以通过kubeadm reset重置

  1. kubeadm init --kubernetes-version=1.19.8 --image-repository=registry.aliyuncs.com/google_containers

1653548786526.jpg

按照提示执行命令:

  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

添加 Node 节点:

可通过kubeadm token list查看当前 token ,默认有效期为24小时,若忘记 token 或者 token 过期,可以用命令 kubeadm token create --print-join-command重新生成

  1. kubeadm join 192.168.100.58:6443 --token fr7lkr.a0088zyozmgn37jo \
  2. --discovery-token-ca-cert-hash sha256:c69c134b28b612542c1168ef324e49ee7e36d333d24a0e69a4e6a74bd94a1cb2

查看 kubelet 启动状态:

  1. systemctl status kubelet

1653549378594.jpg

查看节点信息:

  1. kubectl get nodes

1653549486213.jpg
master 节点NotReady 状态

部署 CNI 网络

安装 calico

  1. kubectl apply -f https://docs.projectcalico.org/v3.14/manifests/calico.yaml

这时 kubectl get nodes命令查看节点状态变为Ready

1653551326392.jpg

检查组件状态

  1. # 都可以
  2. kubectl get cs
  3. kubectl get componentstatus

1653551578404.jpg
可以看到 controller-manager 和 scheduler 是 Unhealthy,按照端口提示检查10252和10251是否有监听

  1. ss -ant|grep 10251
  2. ss -ant|grep 10252

发现均没有监听,检查配置文件/etc/kubernetes/manifests/kube-scheduler.yaml/etc/kubernetes/manifests/kube-controller-manager.yaml并将两个配置文件的配置项- --port=0均注释掉,并重启kubelet, 重新检查组件状态
1653552099903.jpg

Node 节点安装

node 节点都执行 kubeadm join

  1. kubeadm join 192.168.100.58:6443 --token fr7lkr.a0088zyozmgn37jo \
  2. --discovery-token-ca-cert-hash sha256:c69c134b28b612542c1168ef324e49ee7e36d333d24a0e69a4e6a74bd94a1cb2

1653552439342.jpg

检查节点:

master 上执行 kubectl get nodes

1653552552535.jpg

集群检查

  • 检查节点

1653552804745.jpg

  • 检查基础应用

1653552728056.jpg