k8s使用
配置k8s环境:
需要三台服务器。一个作为master,另外两个作为node1,node2 (本次测试使用的是三台centos7服务器)
1.分别修改三台服务器的主机名
# hostnamectl set-hostname master
# hostnamectl set-hostname node1
# hostnamectl set-hostname node2
也可直接修改主机名文件,vi /etc/hostname
修改/etc/hosts 文件(三台服务器hosts文件都一样)
关闭swap(三台都需要做)
swapoff -a655360
,如果不是,尝试重新连接终端。配置ssh互信,那么节点之间就能无密访问,方便日后执行自动化部署
ssh-keygen # 每台机器执行这个命令, 一路回车即可 (生成公钥和私钥)
公钥和私钥路径/root/.ssh/
到master上拷贝公钥到其他节点
安装docker 指定18.06.1:
yum install -y docker-ce-18.06.1.ce-3.el7.x86_64
yum install -y docker(直接安装默认版本docker)
启动docker:
systemctl daemon-reload && systemctl restart docker && systemctl enable docker && systemctl status docker
这一步是所有节点都得安装(包括node节点)
工具说明
- kubeadm: 部署集群用的命令
- kubelet: 在集群中每台机器上都要运行的组件,负责管理pod、容器的生命周期
- kubectl: 集群管理工具
/etc/yum.repos.d 目录下创建 kubernetes.repo 内容如下:
yum 安装 并启动:
不指定版本安装:
yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
systemctl enable kubelet && systemctl start kubelet
还可以指定版本安装:
kubeadm config images list
命令查看依赖需要安装的镜像列表kubeadm采取pod,即容器的方式部署k8s的各个组件,所以需要拉取各个组件的镜像,然而,官方的镜像隶属于k8s.gcr.io
镜像库,由于不可描述的原因,哈哈,没法拉取,所以这里预先拉取阿里云的镜像,再修改tag
kubeadm config images pull --image-repository registry.aliyuncs.com/google_containers
将拉下的镜像 registry.aliyuncs.com/google_containers/etcd:3.4.13-0 更改名为 k8s.gcr.io/etcd:3.4.3-0
docker tag 容器id k8s.gcr.io/etcd:3.4.3-0 给镜像改名
docker rmi registry.aliyuncs.com/google_containers/etcd:3.4.13-0 删除改名前的镜像
可以使用下面脚本直接修改tag:
#!/bin/bash
newtag=k8s.gcr.io
for i in $(docker images | grep -v TAG |awk '{print $1 ":" $2}')
do
image=$(echo $i | awk -F '/' '{print $3}')
docker tag $i $newtag/$image
docker rmi $i
done
也可手动直接拉取镜像:
docker pull registry.aliyuncs.com/google_containers/etcd:3.4.13-0
kubeadm init 初始化master节点
# kubeadm init --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.19.2 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12 --apiserver-advertise-address=192.168.0.249 --ignore-preflight-errors=Swap
# kubeadm version 查看kubernetes-version版本
-
-
-- kubernetes-version:设置kubernetes版本
-
--pod-network-cidr:设置PodIP所在的网段,由于后面使用flannel插件,必须设置成10.244.0.0/16
-
--service-cidr: 设置Service ClusterIP所在的网段
-
--apiserver-advertise-address 设置apiserver的ip地址,多网卡的情况下建议配置成局域网IP
-
--ignore-preflight-errors=Swap 当服务器Swap启用时,忽略该错误继续执行
执行成功后,记下执行过程日志中的如下一段,这段内容记录了注册到Master节点用到的token和秘钥,在添加从节点需要用到
kubeadm join 192.168.0.249:6443 --token 6kdn14.9htpf29ckrx9leyq --discovery-token-ca-cert-hash sha256:96c599c3caa54f2367f19e0bcf23d3df2f14014dd51fb1ee325c25a0d05e714c
使用如下命令初始化成功:(第一次使用上面命令初始化成功,第二次使用如下命令初始化成功。未能找到原因)
kubeadm init --image-repository "k8s.gcr.io" --kubernetes-version "v1.19.3" --pod-network-cidr="10.244.0.0/16"
--service-cidr="10.96.0.0/12" --apiserver-advertise-address="192.168.0.201" --ignore-preflight-errors=Swap
配置kubectl命令( )
# mkdir -p /root/.kube
# sudo cp -i /etc/kubernetes/admin.conf /root/.kube/config
# sudo chown $(id -u):$(id -g) /root/.kube/config
获取pods列表命令
其中coredns pod处于Pending
状态,这个先不管
kubectl get pods --all-namespaces
查看集群的健康状态: $ kubectl get cs
若出现不健康参考:https://www.cnblogs.com/wuliping/p/13780147.html
6、
wget https://raw.githubusercontent.com/coreos/flannel/bc79dd1505b0c8681ece4de4c0d86c5cd2643275/Documentation/kube-flannel.yml -O ${KUBE_YAML_DIR}/kube-flannel.yml --no-check-certificate
本次安装由于无法FQ,同事给我一个kube-flannel.yml 文件,直接复制到虚拟机中的 /root/.kube 目录下
镜像需要改一下:改成quay.io/coreos/flannel:v0.11.0-amd64 (多个地方都需要改过来)
查看flannel插件是否安装成功
#kubectl -n kube-system get po -l app=flannel -o wide
在master上需要 docker pull quay.io/coreos/flannel:v0.11.0-amd64 镜像
备注:还可以使用 calico网络 具体使用方法参考 https://blog.csdn.net/xixihahalelehehe/article/details/105567076
7、部署node节点
node上也是需要下载安装一些镜像的,
需要下载的镜像为:kubeadm config images list
查看部分镜像版本(kube-apiserver、kube-controller-manager、kube-scheduler 、etcd、coredns node节点不需要下载,只是master节点需要下载)
kube-proxy:v1.13、pause:3.2
docker pull registry.aliyuncs.com/google_containers/kube-proxy:v1.19.2
docker pull registry.aliyuncs.com/google_containers/pause:3.2
docker tag registry.aliyuncs.com/google_containers/kube-proxy:v1.19.2 k8s.gcr.io/kubeproxy:v1.19.2
docker tag registry.aliyuncs.com/google_containers/pause:3.2 k8s.gcr.io/pause:3.2
docker rmi registry.aliyuncs.com/google_containers/kube-proxy:v1.19.2
docker rmi registry.aliyuncs.com/google_containers/pause:3.2
此处使用的pod 网络插件 flannel 在node节点不需要下载相关镜像( quay.io/coreos/flannel:v0.11.0-amd64 ),会自动自己下载 。
只需要在master上下载镜像即可
8、添加从节点(把node加入集群里 (kubeadm init 生成的一段))
kubeadm join 192.168.0.249:6443 --token 6kdn14.9htpf29ckrx9leyq \
--discovery-token-ca-cert-hash \
sha256:96c599c3caa54f2367f19e0bcf23d3df2f14014dd51fb1ee325c25a0d05e714c --ignore-preflight-errors=Swap
9、验证测试
在 master上执行:
# kubectl get nodes
节点都显示为NotReady,使用 vim /var/lib/kubelet/kubeadm-flags.env,编辑配置文件,删除掉--network-plugin=cni
master节点和node节点都删除掉--network-plugin=cni