用于快速创建Kubernetes 集群的工具。
准备工作
机器
一主两从集群,系统 CentOS7.9
机器角色 | IP |
---|---|
master | 192.168.100.58 |
node | 192.168.100.59 |
node | 192.168.100.60 |
配置 host
三台机器均设置/配置 host, /etc/hosts
文件添加配置:
# 设置各自的 hostname
hostnamectl set-hostname k8s-master01 --100.58
hostnamectl set-hostname k8s-node01 --100.59
hostnamectl set-hostname k8s-node02 --100.60
# 添加配置
192.168.100.58 k8s-master01
192.168.100.59 k8s-node01
192.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.conf
echo NETWORKING_IPV6=no >> /etc/sysconfig/network
sed -i 's/IPV6INIT=yes/IPV6INIT=no/g' /etc/sysconfig/network-scripts/ifcfg-ens33
sysctl -p
# 查看 ipv6 是否关闭
ip a
将桥接的 IPv4 流量传递到 iptables
cat >>/etc/sysctl.d/kubernetes.conf<<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
# 生效
sysctl --system
master 机器设置免密登录 node
# 一路默认回车
ssh-keygen -t rsa
ssh-copy-id k8s-master01
ssh-copy-id k8s-node01
ssh-copy-id k8s-node02
# 测试是否成功
ssh root@k8s-node01
Docker 安装
三台机器都要安装 docker 环境,并需要配置 docker 的 Cgropu Driver 为 systemd
:
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum 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-reload
systemctl restart docker
集群部署
安装 kubeadm、kubelet、kubectl
添加阿里云 yum 源
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
版本安装,当前安装 1.19.8 版本,1.20 不再把 docker 作为默认的容器运行
yum install -y kubelet-1.19.8 kubeadm-1.19.8 kubectl-1.19.8
systemctl enable kubelet
Master 节点安装
若
kubeadm init
初始化有问题可以通过kubeadm reset
重置
kubeadm init --kubernetes-version=1.19.8 --image-repository=registry.aliyuncs.com/google_containers
按照提示执行命令:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo 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 cs
kubectl get componentstatus
可以看到 controller-manager 和 scheduler 是 Unhealthy
,按照端口提示检查10252和10251是否有监听
ss -ant|grep 10251
ss -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
集群检查
- 检查节点
- 检查基础应用