k8s安装部署集群
说明
这里准备了三台服务器,一台作为主节点(Master),两台作为子节点(Node)
每个步奏分为:
- ALL = 所有服务器
- Master = 主节点
- Node = 子节点
详细步骤
查看ip(ALL)
ip addr
这里地址很重要,最好保存下来,后续会用到
配置HostName(ALL)
配置
sudo hostnamectl set-hostname master sudo hostnamectl set-hostname node1 sudo hostnamectl set-hostname node2
这条命令会删除/etc/hostname文件中的主机名,然后替换为新的主机名。系统会更新/etc/hosts文件.
验证
hostname
IP与主机名映射
配置
vi /etc/hosts
将上方获取到的ip地址和hostname配置
192.168.40.128 master 192.168.40.130 node1 192.168.40.131 node2 185.199.108.133 raw.githubusercontent.com
其中 185.199.108.133 是后续安装flannel网络插件要用到的
验证
ping node1
Close SelLinux(ALL)
配置
setenforce 0
sed -i --follow-symlinks 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux
验证
getenforce
Close FireWalld(ALL)
配置
systemctl stop firewalld
systemctl disable firewalld
验证
systemctl status firewalld
Close SwapOff(ALL)
swapoff -a sed -i 's/.*swap.*/#&/' /etc/fstab
添加K8S、Docker的安装源(ALL)
K8S
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=1 repo_gpgcheck=1 gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg EOF
Docker
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
安装K8S组件(ALL)
yum install kubelet-1.22.4 kubectl-1.22.4 kubeadm-1.22.4 docker-ce-20.10.0 docker-ce-cli-20.10.0 -y
这里说明一下,我这里的指令指定了版本,k8s的所有版本使用起来操作方法都一样,但是如果用其他版本的话,可能需要配置一些东西
启动Kubelet、Docker,设置开机自启(ALL)
配置
systemctl enable kubelet
systemctl start kubelet
systemctl enable docker
systemctl start docker
Kubelet组件运行在Node节点上,维持运行中的Pods以及提供kuberntes运行时环境,主要完成以下使命:
- 监视分配给该Node节点的pods
- 挂载pod所需要的volumes
- 下载pod的secret
- 通过docker/rkt来运行pod中的容器
- 周期的执行pod中为容器定义的liveness探针
- 上报pod的状态给系统的其他组件
- 上报Node的状态
验证
systemctl daemon-reload
systemctl status kubelet
要保证为running
如果出错,卸载重装
yum -y remove kubelet // -y表示又询问都是yes yum list kubelet // 查看是否存在 ----查看状态 systemctl daemon-reload systemctl status kubelet yum -y install kubelet // 重新安装 systemctl enable kubelet // 开机自启 systemctl start kubelet // 启动
修改Docker配置(ALL)
配置
cat <<EOF > /etc/docker/daemon.json { "registry-mirrors": ["https://registry.docker-cn.com"], "exec-opts": ["native.cgroupdriver=systemd"] } EOF
systemctl daemon-reload
systemctl restart docker
验证
docker info |grep Cgroup
初始化集群(Master)
kubeadm init --kubernetes-version=1.22.4 \ --apiserver-advertise-address=192.168.40.128 \ --image-repository registry.aliyuncs.com/google_containers \ --service-cidr=10.96.0.0/12 \ --pod-network-cidr=10.244.0.0/16
- --image-repository registry.aliyuncs.com/google_containers 指定镜像源,由于kubeadm 默认从官网k8s.grc.io下载所需镜像,国内无法访问,因此需要通过--image-repository指定阿里云镜像仓库地址
- --kubernetes-version:版本信息 kubectl version 查询
- 定义POD的网段为: 10.244.0.0/16
- apiserver地址就是master本机IP地址
- --service-cidr=10.96.0.0/12 : 这个参数后的IP地址直接就套用10.96.0.0/12 ,以后安装时也套用即可,不要更改
- --pod-network-cidr=10.244.0.0/16 : k8s内部的pod节点之间网络可以使用的IP段,不能和service-cidr写一样,如果不知道怎么配,就先用这个10.244.0.0/16
如果出现报错,重置
kubeadm reset
成功后,一定要复制最后一句话
kubeadm join 192.168.40.128:6443 --token zyxhg5.ua8dwh4wx9dgrwzk --discovery-token-ca-cert-hash sha256:70d215908d3fefe90b0ca2d00eed5342df3eb083862dd7ed91a105972ac82f29
如果没有复制,可以重新获取
kubeadm token create --print-join-command
复制权限文件(Master)
su - root mkdir -p $HOME/.kube cp -i /etc/kubernetes/admin.conf $HOME/.kube/config chown $(id -u):$(id -g) $HOME/.kube/config
安装Flannel网络插件(Master)
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
网络可能会很慢,多试几次
加入集群(Node)
这个步奏就是在子结点上,执行上面主节点初始化时获取的 join 指令
复制权限文件(Node)
mkdir -p $HOME/.kube cp -i /etc/kubernetes/admin.conf $HOME/.kube/config chown $(id -u):$(id -g) $HOME/.kube/config
查看所有节点(ALL)
kubectl get nodes