用于快速创建Kubernetes 集群的工具。
准备工作
机器
一主两从集群,系统 CentOS7.9
| 机器角色 | IP |
|---|---|
| master | 192.168.100.58 |
| node | 192.168.100.59 |
| node | 192.168.100.60 |
配置 host
三台机器均设置/配置 host, /etc/hosts文件添加配置:
# 设置各自的 hostnamehostnamectl set-hostname k8s-master01 --100.58hostnamectl set-hostname k8s-node01 --100.59hostnamectl set-hostname k8s-node02 --100.60# 添加配置192.168.100.58 k8s-master01192.168.100.59 k8s-node01192.168.100.60 k8s-node02
关闭防火墙
# 关闭systemctl stop firewalld# 禁止开机启动systemctl disable firewalld# 查看状态systemctl status firewalld
关闭 selinux
# 永久 需要重启sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config# 临时setenforce 0
关闭 Swap
如果要启用 swap 设备,需要在集群初始化时添加 —ignore-preflight-error=swap,用来忽略因为 swap 设备导致的报错
# 永久sed -i 's/^[^#].*swap/#&/' /etc/fstab# 临时swapoff -a
关闭 ipv6
echo net.ipv6.conf.all.disable_ipv6=1 >> /etc/sysctl.confecho NETWORKING_IPV6=no >> /etc/sysconfig/networksed -i 's/IPV6INIT=yes/IPV6INIT=no/g' /etc/sysconfig/network-scripts/ifcfg-ens33sysctl -p# 查看 ipv6 是否关闭ip a
将桥接的 IPv4 流量传递到 iptables
cat >>/etc/sysctl.d/kubernetes.conf<<EOFnet.bridge.bridge-nf-call-ip6tables = 1net.bridge.bridge-nf-call-iptables = 1EOF# 生效sysctl --system
master 机器设置免密登录 node
# 一路默认回车ssh-keygen -t rsassh-copy-id k8s-master01ssh-copy-id k8s-node01ssh-copy-id k8s-node02# 测试是否成功ssh root@k8s-node01
Docker 安装
三台机器都要安装 docker 环境,并需要配置 docker 的 Cgropu Driver 为 systemd:
yum install -y yum-utils device-mapper-persistent-data lvm2yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repoyum install -y docker-ce-19.03.12# 设置开机自启并启动systemctl enable --now docker
修改 docker 配置
cat >> /etc/docker/daemon.json<<EOF{"exec-opts": ["native.cgroupdriver=systemd"],"registry-mirrors": ["https://cnxi5446.mirror.aliyuncs.com"],"insecure-registries": ["192.168.100.50:8082"]}EOF# 重启生效systemctl daemon-reloadsystemctl restart docker
集群部署
安装 kubeadm、kubelet、kubectl
添加阿里云 yum 源
cat <<EOF > /etc/yum.repos.d/kubernetes.repo[kubernetes]name=Kubernetesbaseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/enabled=1gpgcheck=0repo_gpgcheck=0gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpgEOF
版本安装,当前安装 1.19.8 版本,1.20 不再把 docker 作为默认的容器运行
yum install -y kubelet-1.19.8 kubeadm-1.19.8 kubectl-1.19.8systemctl enable kubelet
Master 节点安装
若
kubeadm init初始化有问题可以通过kubeadm reset重置
kubeadm init --kubernetes-version=1.19.8 --image-repository=registry.aliyuncs.com/google_containers
按照提示执行命令:
mkdir -p $HOME/.kubesudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/configsudo chown $(id -u):$(id -g) $HOME/.kube/config
添加 Node 节点:
可通过
kubeadm token list查看当前 token ,默认有效期为24小时,若忘记 token 或者 token 过期,可以用命令kubeadm token create --print-join-command重新生成
kubeadm join 192.168.100.58:6443 --token fr7lkr.a0088zyozmgn37jo \--discovery-token-ca-cert-hash sha256:c69c134b28b612542c1168ef324e49ee7e36d333d24a0e69a4e6a74bd94a1cb2
查看 kubelet 启动状态:
systemctl status kubelet
查看节点信息:
kubectl get nodes
部署 CNI 网络
安装 calico
kubectl apply -f https://docs.projectcalico.org/v3.14/manifests/calico.yaml
这时 kubectl get nodes命令查看节点状态变为Ready
检查组件状态
# 都可以kubectl get cskubectl get componentstatus

可以看到 controller-manager 和 scheduler 是 Unhealthy,按照端口提示检查10252和10251是否有监听
ss -ant|grep 10251ss -ant|grep 10252
发现均没有监听,检查配置文件/etc/kubernetes/manifests/kube-scheduler.yaml与/etc/kubernetes/manifests/kube-controller-manager.yaml并将两个配置文件的配置项- --port=0均注释掉,并重启kubelet, 重新检查组件状态
Node 节点安装
node 节点都执行
kubeadm join
kubeadm join 192.168.100.58:6443 --token fr7lkr.a0088zyozmgn37jo \--discovery-token-ca-cert-hash sha256:c69c134b28b612542c1168ef324e49ee7e36d333d24a0e69a4e6a74bd94a1cb2
检查节点:
master 上执行
kubectl get nodes
集群检查
- 检查节点

- 检查基础应用


