注意:不适用于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/所有节点安装,但是只有主节点执行初始化
配置阿里源的 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/nullkubeadm初始化我们的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在线初始化指定镜像源方式本人安装没有成功,所以手动拉取的镜像安装。
根据我们配置的实际情况,需要修改对应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 # 详细查询本地yaml安装,同样是因为访问的问题,可以从分享的网盘下载
yaml官方下载地址:
https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.ymlkube-flannel.yml文件上传到我网盘分享下载:
https://www.aliyundrive.com/s/3f5cEuyFoFX根据本地flannel文件创建flannel网络
kubectl create -f kube-flannel.ymlpod常用查询命令
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网卡。从节点 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真实环境中一般使用资源清单方式构建,这里只是验证下
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中有多个容器,指定容器名称。拆卸后可以重新初始化集群
首先处理各节点
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 条评论) “” |