需要一个master节点,一个worker节点 主节点需要组件 - docker(也可以是其他容器运行时) - kubectl 集群命令行交互工具 - kubeadm 集群初始化工具 工作节点需要组件 - docker(也可以是其他容器运行时) - kubelet 管理 Pod 和容器,确保他们健康稳定运行。 - kube-proxy 网络代理,负责网络相关的工作 ``` # 关闭selinux # 临时禁用selinux setenforce 0 # 禁用交换分区 swapoff -a # 永久禁用,打开/etc/fstab注释掉swap那一行。 sed -i 's/.*swap.*/#&/' /etc/fstab curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo # 删除之前的cni 网络信息 ip link set cni0 down brctl delbr cni0 # 安装依赖 yum install -y epel-release conntrack ipvsadm ipset jq sysstat curl iptables libseccomp # 关闭防火墙 systemctl disable firewalld && systemctl stop firewalld # 设置iptables iptables -F && iptables -X && iptables -F -t nat && iptables -X -t nat && iptables -P FORWARD ACCEPT # 禁用 SELinux # 永久关闭 修改/etc/sysconfig/selinux文件设置 sed -i 's/SELINUX=permissive/SELINUX=disabled/' /etc/sysconfig/selinux sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config # 加载内核模块 cat > /etc/sysconfig/modules/ipvs.modules < /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.23的版本 yum list --showduplicates kubeadm --disableexcludes=kubernetes # 每个节点分别设置对应主机名 hostnamectl set-hostname k8s-master hostnamectl set-hostname k8s-node1 hostnamectl set-hostname k8s-node2 # 所有节点都修改 hosts vi /etc/hosts 192.168.1.5 k8s-master 192.168.193.128 k8s-node1 192.168.1.18 k8s-node2 # 安装kubeadm kubectl kubelet 1.23.12(大于等于24的话,docker就不能愉快工作了) # 主节点 yum install -y kubelet-1.23.12 kubectl-1.23.12 kubeadm-1.23.12 # node节点 yum install -y kubelet-1.23.12 kubectl-1.23.12 kubeadm-1.23.12 echo 'KUBELET_EXTRA_ARGS="--runtime-cgroups=/systemd/system.slice --kubelet-cgroups=/systemd/system.slice"' > /etc/sysconfig/kubelet # 启动kubelet服务 systemctl enable kubelet && systemctl start kubelet # 查看已经安装的版本 kubelet --version ``` 二. 初始化 k8s-master 环境 或 kubeadm reset 后都要按以下步骤执行, IP地址需根据实际情况调整 ``` # 因为需要下载 images 需要一些时间, 这里会等待一会儿, IP 按当前网络环境自行修改: # 说明: https://kubernetes.io/zh/docs/reference/setup-tools/kubeadm/kubeadm-init/ kubeadm init \ --kubernetes-version=1.23.12 \ --apiserver-advertise-address=192.168.1.5 \ --image-repository registry.aliyuncs.com/google_containers \ --service-cidr=10.1.0.0/16 \ --pod-network-cidr=10.244.0.0/16 ``` 命令说明: –pod-network-cidr: 定义pod网段为:10.244.0.0/16 –apiserver-advertise-address:master主机内网IP地址 –image-repository:指定阿里云镜像仓库地址。由于kubeadm 默认从官网http://k8s.grc.io下载所需镜像,国内无法访问,因此需要通过–image-repository指定阿里云镜像仓库地址。 集群初始化会出现如下结果 Your Kubernetes control-plane has initialized successfully! 上面安装完后,会提示你输入如下命令,复制粘贴过来,执行即可。 ``` # 上面安装完成后,k8s会提示你输入如下命令,执行 mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config ``` 如果是root用户请执行: 最好加入到 .zshrc .bashrc, 此处有疑问.... TODO: ``` export KUBECONFIG=/etc/kubernetes/admin.conf ``` node机上执行: 此时执行会报错并且执行不成功, 请稍等执行好flannel 再到node机上执行: 如忘记: 可使用命令 kubeadm token create --print-join-command 查看: ``` kubeadm join 192.168.1.5:6443 --token zxk5dz.es4kdp9ahxydsk5i \ --discovery-token-ca-cert-hash sha256:a5f29decea10aecf53cb174b22120095dade42303b34b5d4f5ea7e0bf4fb00b8 ``` 配置: kube-flannel.yml ``` # 服务器没办法访问的话,直接把这个地址在浏览器打开,然后下载下来也可以 curl -k -O https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml kubectl apply -f kube-flannel.yml ``` 重要: ok, 此时去node机上执行 kubeadm join 即可, 这时在node执行 join 时会自动生 /run/flannel/subnet.env 文件, 而不会再报找不到文件的错误!