运行模式

  • 独立组件模式;系统各个组件直接以守护进程的方式运行于节点之上,各组件相互协作构成集群
  • 静态Pod模式;除kubelet 和 Docker 之外的其他组件都以静态的Pod对象运行于Master 主机之上
  • 自托管模式;类似于”静态Pod模式” 除了基础组件之外的其他组件都以 DamonSet 类型的控制器管理运行,而非静态的Pod对象

系统要求

  • Linux 操作系统
  • CPU 必须大于2核心
  • 内存必须大于2GB

生产环境中,应该至少部署三个协同工作的Master 节点

检查操作系统

查询系统版本

  1. # Centos 7.x 8.x 以及Centos 分支 (AliOS)
  2. cat /etc/redhat-release

查询主机名称

  • 主机名称不能有 **.**``**-** **非字母、数字**
  • Kubernetes 集群中的节点名字
  1. # 此处 hostname 的输出将会是该机器在 Kubernetes 集群中的节点名字
  2. hostname
  3. # 如果需要设置主机名称
  4. hostnamectl set-hostname [your-new-host-name]
  5. # 查看是否修改成功
  6. hostnamectl status

设置主机Host

  1. echo "127.0.0.1 $(hostname)" >> /etc/hosts

检查网卡

与K8S集群连接的网卡名字必须是 eth0

  1. ip route show

检查CPU核心数

CPU 核心数不能低于2核

  1. lscpu

设置一些环境变量

安装必备工具

安装基础工具

安装 nfs-utils 挂载磁盘 安装 wget

  1. yum install -y nfs-utils
  2. yum install -y wget

禁用防火墙

  1. systemctl stop firewalld
  2. systemctl disable firewalld

关闭 SeLinux

  1. setenforce 0
  2. sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config

关闭虚拟内存

  1. swapoff -a
  2. yes | cp /etc/fstab /etc/fstab_bak
  3. cat /etc/fstab_bak |grep -v swap > /etc/fstab

安装 containerd

卸载

  1. yum remove -y containerd.io

安装工具

  1. yum install -y yum-utils device-mapper-persistent-data lvm2

添加yam配置地址

  1. yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

安装 containerd

来源K8S 官网

  1. cat <<EOF | sudo tee /etc/modules-load.d/containerd.conf
  2. overlay
  3. br_netfilter
  4. EOF
  5. sudo modprobe overlay
  6. sudo modprobe br_netfilter
  7. # Setup required sysctl params, these persist across reboots.
  8. cat <<EOF | sudo tee /etc/sysctl.d/99-kubernetes-cri.conf
  9. net.bridge.bridge-nf-call-iptables = 1
  10. net.ipv4.ip_forward = 1
  11. net.bridge.bridge-nf-call-ip6tables = 1
  12. EOF
  13. # Apply sysctl params without reboot
  14. sudo sysctl --system
  1. yum update -y && sudo yum install -y containerd.io-1.4.3

配置containerd

etc 配置容器目录;输出默认配置

  1. mkdir -p /etc/containerd
  2. containerd config default > /etc/containerd/config.toml

设置阿里云源

  1. export REGISTRY_MIRROR=https://registry.cn-hangzhou.aliyuncs.com

修改默认配置文件

  1. sed -i "s#k8s.gcr.io#registry.aliyuncs.com/k8sxio#g" /etc/containerd/config.toml
  2. sed -i '/containerd.runtimes.runc.options/a\ \ \ \ \ \ \ \ \ \ \ \ SystemdCgroup = true' /etc/containerd/config.toml
  3. sed -i "s#https://registry-1.docker.io#${REGISTRY_MIRROR}#g" /etc/containerd/config.toml

启动 containerd

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

安装Kubernetes 核心组件

卸载

  1. yum remove -y kubelet kubeadm kubectl

安装

设置yum 为阿里云源

  1. cat <<EOF > /etc/yum.repos.d/kubernetes.repo
  2. [kubernetes]
  3. name=Kubernetes
  4. baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
  5. enabled=1
  6. gpgcheck=0
  7. repo_gpgcheck=0
  8. gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
  9. http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
  10. EOF

安装kubeletkubeadmkubectl

  1. # 将 ${1} 替换为 kubernetes 版本号,例如 1.20.1
  2. yum install -y kubelet-${1} kubeadm-${1} kubectl-${1}

绑定

  1. crictl config runtime-endpoint /run/containerd/containerd.sock

启动

  1. systemctl daemon-reload
  2. systemctl enable kubelet && systemctl start kubelet

输出版本

  1. containerd --version
  2. kubelet --version

Master 节点

配置

  1. export MASTER_IP=x.x.x.x
  2. # 替换 apiserver.demo 为 您想要的 dnsName
  3. export APISERVER_NAME=apiserver.demo
  4. # Kubernetes 容器组所在的网段,该网段安装完成后,由 kubernetes 创建,事先并不存在于您的物理网络中
  5. export POD_SUBNET=10.100.0.1/16
  6. echo "${MASTER_IP} ${APISERVER_NAME}" >> /etc/hosts

删除默认配置

  1. rm -f ./kubeadm-config.yaml

写入新配置; 将 ${1} 替换为 kubernetes 版本号,例如 1.20.1

  1. # 将 ${1} 替换为 kubernetes 版本号,例如 1.20.1
  2. cat <<EOF > ./kubeadm-config.yaml
  3. ---
  4. apiVersion: kubeadm.k8s.io/v1beta2
  5. kind: ClusterConfiguration
  6. kubernetesVersion: v${1}
  7. imageRepository: registry.aliyuncs.com/k8sxio
  8. controlPlaneEndpoint: "${APISERVER_NAME}:6443"
  9. networking:
  10. serviceSubnet: "10.96.0.0/16"
  11. podSubnet: "${POD_SUBNET}"
  12. dnsDomain: "cluster.local"
  13. ---
  14. apiVersion: kubelet.config.k8s.io/v1beta1
  15. kind: KubeletConfiguration
  16. cgroupDriver: systemd
  17. EOF

初始化Master

  1. kubeadm init --config=kubeadm-config.yaml --upload-certs

配置 kubectl

  1. rm -rf /root/.kube/
  2. mkdir /root/.kube/
  3. cp -i /etc/kubernetes/admin.conf /root/.kube/config

安装网络插件 calico

参考文档地址

  1. rm -f calico-3.17.1.yaml
  2. # 安装
  3. kubectl create -f https://kuboard.cn/install-script/v1.20.x/calico-operator.yaml
  4. # 下载资源配置
  5. wget https://kuboard.cn/install-script/v1.20.x/calico-custom-resources.yaml
  6. # 修改网络地址
  7. sed -i "s#192.168.0.0/16#${POD_SUBNET}#" calico-custom-resources.yaml
  8. # 应用资源插件
  9. kubectl create -f calico-custom-resources.yaml

使用阿里云代理

  • 阿里云开通节点代理托管
  • 选择集群 找到 连接信息 选择 网络类型 复制出对应的yaml 文件
  1. # 复制文件到agent.yaml
  2. # 应用yaml 文件
  3. kubectl apply -f agent.yaml