k8s的在线部署
需要注意:docker和k8s的版本是有对应要求的,可以通过docker和k8s版本对应关系文档进行查看。
k8s中文文档:
https://www.kubernetes.org.cn/docs
k8s在线部署
该部署使用的Centos7为例
前提条件:
1. CPU >= 2 核; 内存 >= 2 G;
2.所有设备安装完docker,并启动docker(全部设备),可参考我之前写的docker安装手册Docker在线部署
服务规划:
安装前准备(所有设备):
1.关闭防火墙
systemctl disable firewalld.service systemctl stop firewalld.service
2.关闭SELinux
setenforce 0 //临时关闭
vi /etc/selinux/config //永久关闭
SELINUX=enforcing改为SELINUX=disabled
3.关闭交换分区Swap
swapoff -a //临时关闭 vi /etc/fstab //永久关闭
加上#号注释掉
#UUID=364c9b7e-d20d-4cc1-9e8c-b06379a6f392 swap swap defaults 0 0
4.配置主机名和IP映射
vi /etc/hosts
192.168.36.189 master 192.168.36.190 Node1
#配置完成需要重启服务器 reboot
5.设置网桥流量桥接
cat <<EOF > /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 EOF
sysctl --system
6.配置互信关系(该项不是必要的)
ssh-keygen -t rsa ssh-copy-id -i /root/.ssh/id_rsa.pub root@Node1 //189上执行 ssh-copy-id -i /root/.ssh/id_rsa.pub root@master //190上执行
7.Linux内核升级(该项不是必要的)
CentOS 7.x 系统自带的3.10.x 内核存在一些 bugs,可能会导致运行的 Docker和Kubernetes不稳定
#查看内核版本
uname -r
#可以查看我之前写的Linux内核升级手册进行升级
安装k8s
1.配置k8s加速镜像(所有设备)
cat << EOF | tee /etc/yum.repos.d/kubernetes.repo [kubernetes] name=Kubernetes baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64 enabled=1 gpgcheck=0 repo_gpgcheck=0 gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg exclude=kubelet kubeadm kubectl EOF
2.下载安装kubelet kubeadm kubectl三大组件,版本不加则认为最新版本,这里我指定了1.20.9版本(所有设备)
yum install -y kubelet-1.20.9 kubeadm-1.20.9 kubectl-1.20.9 --disableexcludes=kubernetes
3.启动kubelet服务(所有设备)
systemctl enable --now kubelet
这时候的kubelet会每几秒重启一次,因为它陷入了一个等待kubeadm指令的死循环
4.下载所需镜像(所有设备)
#编写一个脚本实现
cat << EOF | tee /images.sh #!/bin/bash images=( kube-apiserver:v1.20.9 kube-proxy:v1.20.9 kube-controller-manager:v1.20.9 kube-scheduler:v1.20.9 coredns:1.7.0 etcd:3.4.13-0 pause:3.2 ) #可以看出所要下载的镜像都是我们K8S的组件 for imageName in ${images[@]};do docker pull registry.cn-hangzhou.aliyuncs.com/lfy_k8s_images/$imageName done EOF
#赋予执行权限并执行
chmod +x /images.sh && ./images.sh
#通过以下命令检查下载下来的镜像是否一致
docker images
5.k8s的初始化(master节点)
kubeadm init \ --apiserver-advertise-address=192.168.36.189 \ #[master节点的IP地址] --control-plane-endpoint=master \ #[master节点的域名] --image-repository registry.cn-hangzhou.aliyuncs.com/lfy_k8s_images \ --kubernetes-version=v1.20.9 \ --service-cidr=10.96.0.0/16 \ #[自定义的IP范围(创建SVC时所分配的范围)] --pod-network-cidr=10.244.0.0/16 #[自定义的IP范围(创建pod时所分配的范围)]
#设备IP范围、service-cidr IP范围、pod IP范围不可重叠
#输出如下即可
To start using your cluster, you need to run the following as a regular user: mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config You should now deploy a pod network to the cluster. Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at: https://kubernetes.io/docs/concepts/cluster-administration/addons/ #网络组件下载地址 You can now join any number of machines by running the following on each node as root: kubeadm join 192.168.36.189:6443 --token 1h3pvi.vr9mpn9znd9be3ov --discovery-token-ca-cert-hash sha256:02e203632dad339cc02ca3d837813b05330244fd3bd9bbf5bf6feb4 ece9f03e6 #注意该项,该项为node节点加入k8s的命令
#然后执行提示的内容
mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config
6.查看k8s节点信息(master节点)
kubectl get node
#查看状态为NotReady是因为还没配置网络组件
7.部署网络组件(master节点)
#这里需要注意calico与k8s的对应关系,可通过该地址进行查看https://projectcalico.docs.tigera.io/archive/v3.20/getting-started/kubernetes/requirements
#修改calico.yaml文件
vim /calico.yaml
#通过搜索192.168.0.0找到下列项并修改 # - name: CALICO_IPV4POOL_CIDR #去掉注释 # value: “192.168.0.0/16” #该地方需要改成我们自己设定的Pod IP网段--pod-network-cidr=10.244.0.0/16,也就是将192.168.0.0修改成10.244.0.0,并去掉注释
注意: 该两项需和上下文进行对齐
#运行资源清单文件
kubectl apply -f /calico.yaml
8.查看所有Pod的运行状态,都为running即可(master节点)
kubectl get pod -A
#此时再次查看k8s的节点信息状态就会都为Ready了
kubectl get nodes
9.node节点加入k8s(node节点)
#执行之前master节点初始化所提示的命令
kubeadm join 192.168.36.189:6443 --token 1h3pvi.vr9mpn9znd9be3ov --discovery-token-ca-cert-hash sha256:02e203632dad339cc02ca3d837813b05330244fd3bd9bbf5bf6feb4 ece9f03e6
10.查看k8s节点信息(master节点)
#此时再查看k8s的节点信息时,就出现了node节点
kubectl get node
至此我们的k8s就部署成功了!