Kubernetes集群实验环境构建(v1.23.8)

注意:不适用于1.24以上版本

插入的代码块不能换行正常显示呢?

接上一篇分享学习环境K8S集群的构建。新手初学,弄个好几天,遇到好多坑,总结了下面的笔记。希望对新手有所帮助。

请先完成环境初始化再继续,下面有环境初始化文章链接。

  • 实验环境

k8s-master: 192.168.111.101

node-1: 192.168.111.104

node-2: 192.168.111.105

  • 环境初始化脚本

maser和node节点都需要执行

初始化脚本请参考上一篇文章:

https://www.toutiao.com/article/7131906627682206212/

1、安装 Kubeadm

所有节点安装,但是只有主节点执行初始化

配置阿里源的 Kubernetes 仓库

cat < /etc/yum.repos.d/kubernetes.repo[kubernetes]name=Kubernetesbaseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/enabled=1gpgcheck=0repo_gpgcheck=0gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpgEOF

安装相关工具

因为kubelet需要和容器接口进行交互来启动容器,而我们的k8s通过

kubeadm安装之后,都是以Pod的方式存在,即底层都是已容器的方式运行

所以需要设置开机自启动,不然的话重启之后k8s不会自动启动的

 #  安装指定版本 所有节点安装yum install -y kubelet-1.23.8-0 kubeadm-1.23.8-0 kubectl-1.23.8-0  # 设置开机启动,但不需要手动启动systemctl enable kubelet.service                                  

列出当前yum源所有可以安装的版本

yum list kubeadm --showduplicates

启动 kubectl 自动补全功能

yum install bash-completion当前用户生效echo 'source <(kubectl completion bash)' >>~/.bashrc系统全局kubectl completion bash | sudo tee /etc/bash_completion.d/kubectl > /dev/null

2、拉取所需镜像

kubeadm初始化我们的Kubernetes集群会从google的GCE下来对应镜像

因为访问的问题无法直接下载(试过修改阿里源也无法下载),建议先下载之后导入再安装为最佳方式。

注: 镜像同样需要导入到其他node节点中,或者可以手动拉取。

获取本地镜像方式,如果有可以直接导入,或者手动从Docker仓库拉取

根据已安装的kubeadm版本 获取其他镜像所需版本

查看创建集群所需要的镜像版本

kubeadm config images list [--kubernetes-version ]

# 查看创建集群所需要的镜像版本kubeadm config images list --kubernetes-version v1.23.8



  • 本地镜像导入

将镜像压缩包kubeadm-basic.images.tar.gz上传到master服务器

可通过下面脚本导入镜像。

镜像压缩包传的阿里云,结果没办法分享压缩包[捂脸]

手机热点上网,改天上传到别的网盘再分享,大家可以使用下面方法手动在线拉取镜像。

#!/bin/bash# 导入镜像脚本tar -xvf kubeadm-basic.images.tar.gzls kubeadm-basic.images > /tmp/images-list.txtfor i in $( cat /tmp/images-list.txt )do    echo "---> Start loading $i images"    docker load -i kubeadm-basic.images/$idonerm -f /tmp/images-list.txt
  • 手动在线拉取镜像
#!/bin/bash# 拉取k8s基础镜像docker pull k8simage/kube-apiserver:v1.23.8docker pull k8simage/kube-controller-manager:v1.23.8docker pull k8simage/kube-scheduler:v1.23.8docker pull k8simage/kube-proxy:v1.23.8docker pull k8simage/pause:3.6docker pull k8simage/etcd:3.5.1-0docker pull coredns/coredns:1.8.6# 修改镜像标签docker tag k8simage/kube-apiserver:v1.23.8 k8s.gcr.io/kube-apiserver:v1.23.8docker tag k8simage/kube-controller-manager:v1.23.8 k8s.gcr.io/kube-controller-manager:v1.23.8docker tag k8simage/kube-scheduler:v1.23.8 k8s.gcr.io/kube-scheduler:v1.23.8docker tag k8simage/kube-proxy:v1.23.8 k8s.gcr.io/kube-proxy:v1.23.8docker tag k8simage/pause:3.6 k8s.gcr.io/pause:3.6docker tag k8simage/etcd:3.5.1-0 k8s.gcr.io/etcd:3.5.1-0docker tag coredns/coredns:1.8.6 k8s.gcr.io/coredns/coredns:1.8.6# 删除源镜像docker rmi k8simage/kube-apiserver:v1.23.8docker rmi k8simage/kube-controller-manager:v1.23.8docker rmi k8simage/kube-scheduler:v1.23.8docker rmi k8simage/kube-proxy:v1.23.8docker rmi k8simage/pause:3.6docker rmi k8simage/etcd:3.5.1-0docker rmi coredns/coredns:1.8.6

3、初始化主节点

在线初始化指定镜像源方式本人安装没有成功,所以手动拉取的镜像安装。

  • 生成配置文件

根据我们配置的实际情况,需要修改对应IP等参数

kubeadm config print init-defaults > kubeadm-config.yaml
  • 编辑配置文件

需要修改的如下所示:

apiVersion: kubeadm.k8s.io/v1beta3bootstrapTokens:- groups:  - system:bootstrappers:kubeadm:default-node-token  token: abcdef.0123456789abcdef  ttl: 24h0m0s  usages:  - signing  - authenticationkind: InitConfigurationlocalAPIEndpoint:  advertiseAddress: 192.168.111.101   # 修改master本机IP  bindPort: 6443nodeRegistration:  criSocket: /var/run/dockershim.sock  imagePullPolicy: IfNotPresent  name: node  taints: null---apiServer:  timeoutForControlPlane: 4m0sapiVersion: kubeadm.k8s.io/v1beta3certificatesDir: /etc/kubernetes/pkiclusterName: kubernetescontrollerManager: {}dns: {}etcd:  local:    dataDir: /var/lib/etcdimageRepository: k8s.gcr.iokind: ClusterConfigurationkubernetesVersion: 1.23.8            # 修改对应版本号networking:  dnsDomain: cluster.local  podSubnet: "10.244.0.0/16"         # 新增 Flannel插件默认的网络地址就是10.244网段  serviceSubnet: 10.96.0.0/12scheduler: {}
  • 执行初始化命令

--upload-certs多主节点的证书自动颁发。单主节点可以不需要

kubeadm init \--config=kubeadm-config.yaml \--upload-certs | tee kubeadm-init.log
  • 执行后续输出命令

根据初始化日志信息创建。

mkdir -p $HOME/.kube # 报错连接配置cp -i /etc/kubernetes/admin.conf $HOME/.kube/config # 管理员配置文件chown $(id -u):$(id -g) $HOME/.kube/config # 授权kubectl get node  # 发现是Notready状态,需要构建flannel网络。kubectl get nodes -o wide  # 详细查询

4、部署 flannel 网络

本地yaml安装,同样是因为访问的问题,可以从分享的网盘下载

yaml官方下载地址:

https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

kube-flannel.yml文件上传到我网盘分享下载:

https://www.aliyundrive.com/s/3f5cEuyFoFX

根据本地flannel文件创建flannel网络

kubectl create -f kube-flannel.yml

pod常用查询命令

kubectl get pod -n kube-system               # -n 指定名称空间查询kubectl get pod -n kube-system  -w         # 动态查询kubectl get pod -n kube-system -o wide  # 详细输出kubectl get pod -A                                    # 查询所有名称空间的pod信息kubectl logs kube-flannel-ds-qj9br -n kube-flannel        # 查询指定名称空间下pod的日志ifconfig        # 查询网卡信息,flannel安装成功后会新增flannel网卡。

5、将node节点加入主节点

从节点 kubelet要先停止再加入,否则报错端口占用

systemctl stop kubelet

根据初始化日志kubeadm-init.log中最后一行给出的加入节点命令,在每个节点执行,加入到集群中。

节点中需要先安装kubeadm工具

注意不要直接复制本条命令,没个人部署后生成的命令不一致,要在日志中查询

kubeadm join 192.168.111.101:6443 --token abcdef.0123456789abcdef  \  --discovery-token-ca-cert-hash sha256:b5a5352594727bf9ac5cb21bfc0a6218a757a8a9ccd852f4775959b88e434632

查看node节点信息

kubectl get nodes                                                            # 查询节点信息 kubectl get nodes -n kube-system -w                             # 指定名称空间动态查询podkubectl get nodes -n kube-system -o wide                     # 指定名称空间动态详细输出查询pod

6、手动运行pod,验证环境

真实环境中一般使用资源清单方式构建,这里只是验证下

kubectl run --help # 查看帮助信息。

kubectl run nginx-deployment --image=nginx --port=80

查询pod信息

kubectl get pods -A -o wide                                                  # 查询pod详细信息kubectl describe pod pod名称                                               # 查询pod详细信息。kubectl logs pod名称 -c 容器名称                                          #   查看容器日志如果pod中只有一个容器,不需要指定-ckubectl get pods pod名称-o jsonpath={.spec.containers[*].name}  #   查询pod内的容器名称


进入pod

kubectl exec pod名称 -it -- /bin/sh # 如果只有一个容器 -- 为固定格式 kubectl exec pod名称 -c 容器名称 -it -- /bin/sh # 如果pod中有多个容器,指定容器名称。

7、拆卸集群

拆卸后可以重新初始化集群

首先处理各节点

kubectl drain  --delete-local-data --force --ignore-daemonsetskubectl delete node 

执行如下命令来重置集群

kubeadm reset

删除旧的配置文件

rm -f /etc/kubernetes/kubelet.conf rm -rf /etc/kubernetes/pki/ca.crtrm /etc/cni/net.d/* -f systemctl stop kubelet 
发表评论
留言与评论(共有 0 条评论) “”
   
验证码:

相关文章

推荐文章