当前位置:网站首页 > C++编程 > 正文

kubelet的作用(kubelet csi)



Kubernetes,简称 K8S,是一个用于自动部署、扩展和管理容器化应用程序的开源系统。它最初由 Google 开发,基于其内部使用的大规模容器编排工具 Borg,后来由 Google 捐赠给 Cloud Native Computing Foundation (CNCF) 并开源。Kubernetes 的名称来源于希腊语,意为“舵手”或“飞行员”,象征着它在容器化应用管理中的引导作用。

作用:

  • 自动化部署: 自动将应用程序部署到集群中的多个节点上。
  • 扩展管理: 根据需求自动扩展或缩减应用程序的实例数量。
  • 容器编排: 管理多个容器化应用程序的集群,确保它们在不同节点上高效运行。

官网:

  • 英文:https://kubernetes.io
  • 中文:https://kubernetes.io/zh-cn/docs

GitHub:

  • https://github.com/kubernetes/kubernetes

版本更新:
Kubernetes 大约每季度发布一个新版本,版本号如 1.12, 1.15, 1.17, 1.18, 1.20, 1.22, 1.24, 1.28 等。

传统的后端部署方式通常需要手动将应用程序包部署到服务器上,并通过脚本启动和管理服务。这种方式在面对高并发请求时,需要运维人员手动扩展服务器和部署服务,效率低下且容易出错。

Kubernetes 解决了以下痛点:

  • 集群管理: 单机使用 Docker 无法有效管理大规模集群。
  • 管理成本: 随着容器数量的增加,手动管理成本急剧上升。
  • 容灾与自愈: 缺乏有效的容灾和自愈机制。
  • 大规模调度: 没有预设的编排模板,无法快速大规模调度容器。
  • 配置管理: 缺乏统一的配置管理中心工具。
  • 生命周期管理: 没有容器生命周期的管理工具。
  • 图形化管理: 缺乏图形化的运维管理工具。

Kubernetes 的主要功能:

  • 容器化应用管理: 使用 Docker 等容器技术对应用程序进行打包、实例化和运行。
  • 集群管理: 以集群的方式运行和管理跨机器的容器。
  • 跨机器通讯: 解决 Docker 跨机器容器之间的通讯问题。
  • 自我修复: 通过自我修复机制确保容器集群始终运行在用户期望的状态。

1. 弹性伸缩

Kubernetes 支持根据命令、UI 或基于 CPU 使用情况自动快速扩容和缩容应用程序实例。这确保了在业务高峰期的高可用性,并在业务低峰期回收资源,以最小成本运行服务。

示例:

  • 假设有 2 台机器提供 Web 服务,当网站高并发时,系统资源占比达到一定阈值,Kubernetes 会自动扩展机器数量,例如增加到 10 台。
  • 一旦并发量下降,Kubernetes 会自动回收资源,减少到 1 台机器。

2. 自我修复

Kubernetes 在节点故障时会重新启动失败的容器,替换和重新部署,确保预期的副本数量。它还会杀死健康检查失败的容器,并在容器未准备好之前不会处理客户端请求,确保线上服务不中断。

示例:

  • 假设有 2 台业务机器,IP 分别为 172.16.0.2 和 172.16.0.10。如果 172.16.0.2 故障,用户期望值是 1 台机器运行,Kubernetes 会自动重新拉起一台机器,确保始终有 1 台机器在运行。

3. 服务发现和负载均衡

Kubernetes 为多个容器提供一个统一访问入口(内部 IP 地址和一个 DNS 名称),并且负载均衡关联的所有容器,使得用户无需考虑容器 IP 问题。

4. 自动发布(默认滚动发布模式)和回滚

Kubernetes 采用滚动更新策略更新应用,一次更新一个或部分 Pod,而不是同时删除所有 Pod。如果更新过程中出现问题,Kubernetes 将回滚更改,确保升级不影响业务。

示例:

  • 假设有 3 台 Nginx 服务器,版本为 1.20。在进行版本升级时,Kubernetes 会先更新一台服务器到 1.24 版本,另外两台继续对外提供服务。一旦更新成功,再逐步更新其他服务器。

5. 集中化配置管理和密钥管理

Kubernetes 管理机密数据和应用程序配置,而不需要把敏感数据暴露在镜像里,提高敏感数据安全性。并可以将一些常用的配置存储在 Kubernetes 中,方便应用程序使用。

6. 存储编排,支持外挂存储并对外挂存储资源进行编排

Kubernetes 支持挂载外部存储系统,无论是来自本地存储、公有云(如 AWS),还是网络存储(如 NFS、Glusterfs、Ceph),都可以作为集群资源的一部分使用,极大提高存储使用灵活性。

7. 任务批处理运行

Kubernetes 提供一次性任务和定时任务,满足批量数据处理和分析的场景。

Kubernetes (K8S) 采用的是主从设备模型(Master-Slave 架构),其中 Master 节点负责集群的调度、管理和运维,而 Slave 节点(也称为 Worker Node 节点)是集群中的计算工作负载节点。每个 Node 都会被 Master 分配一些工作负载。

Master 节点:Master 节点是整个集群的大脑,负责集群的调度、管理和运维。Master 组件可以在集群中的任何计算机上运行,但建议 Master 节点占据一个独立的服务器,以确保其高可用性和稳定性。

Worker Node 节点:Worker Node 节点是集群中的计算工作负载节点。每个 Node 都会被 Master 分配一些工作负载。当某个 Node 宕机时,其上的工作负载会被 Master 自动转移到其他节点上去。

核心组件:

----- Master 组件 -----

Kube-apiserver

  • 作用: 用于暴露 Kubernetes API,任何资源请求或调用操作都是通过 kube-apiserver 提供的接口进行。
  • 功能: 以 HTTP Restful API 提供接口服务,所有对象资源的增删改查和监听操作都交给 API Server 处理后再提交给 Etcd 存储。
  • 理解: API Server 是 K8S 的请求入口服务,负责接收 K8S 所有请求(来自 UI 界面或者 CLI 命令行工具),然后根据用户的具体请求,去通知其他组件干活。

Kube-controller-manager

  • 作用: 运行管理控制器,是 K8S 集群中处理常规任务的后台线程,是 K8S 集群里所有资源对象的自动化控制中心。
  • 功能: 由一系列控制器组成,通过 API Server 监控整个集群的状态,并确保集群处于预期的工作状态。

    主要控制器:

  • Node Controller(节点控制器): 负责在节点出现故障时发现和响应。
  • Replication Controller(副本控制器): 负责保证集群中一个 RC 所关联的 Pod 副本数始终保持预设值。
  • Endpoints Controller(端点控制器): 填充端点对象(即连接 Services 和 Pods),负责监听 Service 和对应的 Pod 副本的变化。
  • Service Account & Token Controllers(服务帐户和令牌控制器): 为新的命名空间创建默认帐户和 API 访问令牌。
  • ResourceQuota Controller(资源配额控制器): 确保指定的资源对象在任何时候都不会超量占用系统物理资源。
  • Namespace Controller(命名空间控制器): 管理 namespace 的生命周期。
  • Service Controller(服务控制器): 属于 K8S 集群与外部的云平台之间的一个接口控制器。

Kube-scheduler

  • 作用: 是负责资源调度的进程,根据调度算法为新创建的 Pod 选择一个合适的 Node 节点。
  • 功能: 通过预选策略(predicate)和优选策略(priorities)选择最合适的 Node 节点来部署 Pod。

----- 配置储存中心 -----

Etcd

  • 作用: K8S 的存储服务,etcd 是分布式键值存储系统,存储了 K8S 的关键配置和用户配置。
  • 功能: K8S 中仅 API Server 才具备读写权限,其他组件必须通过 API Server 的接口才能读写数据。

----- Node 组件 -----

Kubelet

  • 作用: Node 节点的监视器,以及与 Master 节点的通讯器。
  • 功能: 定时向 API Server 汇报自己 Node 节点上运行的服务的状态,并接受来自 Master 节点的指示采取调整措施。
  • 理解: Kubelet 从 Master 节点获取自己节点上 Pod 的期望状态,直接跟容器引擎交互实现容器的生命周期管理,管理镜像和容器的清理工作。

Kube-Proxy

  • 作用: 在每个 Node 节点上实现 Pod 网络代理,是 Kubernetes Service 资源的载体,负责维护网络规则和四层负载均衡工作。
  • 功能: 负责写入规则至 iptables、ipvs 实现服务映射访问,维护虚拟的 Pod 集群网络。

Docker 或 Rocket

  • 作用: 容器引擎,运行容器,负责本机的容器创建和管理工作。

Kubernetes (K8S) 是一个高度自动化的资源控制系统,通过跟踪对比 etcd 存储里保存的资源期望状态与当前环境中的实际资源状态的差异,来实现自动控制和自动纠错等高级功能。Kubernetes 包含多种类型的资源对象,如 Pod、Label、Service、Replication Controller 等,这些资源对象可以通过 Kubernetes 提供的 kubectl 工具进行增、删、改、查等操作,并将其保存在 etcd 中持久化存储。

Pod

Pod 是 Kubernetes 创建或部署的最小/最简单的基本单位,一个 Pod 代表集群上正在运行的一个进程。一个 Pod 由一个或多个容器组成,Pod 中容器共享网络、存储和计算资源,在同一台 Docker 主机上运行。

特点:

  • 一个 Pod 里可以运行多个容器,这种模式称为边车模式(SideCar)。
  • 同一个 Pod 之间的容器可以通过 localhost 互相访问,并且可以挂载 Pod 内所有的数据卷。
  • 不同的 Pod 之间的容器不能用 localhost 访问,也不能挂载其他 Pod 的数据卷。

 Pod 控制器

Pod 控制器 是 Pod 启动的一种模板,用来保证在 Kubernetes 里启动的 Pod 应始终按照用户的预期运行(副本数、生命周期、健康状态检查等)。

常见的 Pod 控制器:

  • Deployment: 无状态应用部署。Deployment 的作用是管理和控制 Pod 和 ReplicaSet,管控它们运行在用户期望的状态中。
  • ReplicaSet: 确保预期的 Pod 副本数量。ReplicaSet 的作用就是管理和控制 Pod,管控它们好好干活。但是,ReplicaSet 受控于 Deployment。
  • Daemonset: 确保所有节点运行同一类 Pod,保证每个节点上都有一个此类 Pod 运行,通常用于实现系统级后台任务。
  • Statefulset: 有状态应用部署。
  • Job: 一次性任务。根据用户的设置,Job 管理的 Pod 把任务成功完成就自动退出了。
  • Cronjob: 周期性计划性任务。

 Label

Label 是 Kubernetes 特色的管理方式,便于分类管理资源对象。Label 可以附加到各种资源对象上,例如 Node、Pod、Service、RC 等,用于关联对象、查询和筛选。

特点:

  • 一个 Label 是一个 key-value 的键值对,其中 key 与 value 由用户自己指定。
  • 一个资源对象可以定义任意数量的 Label,同一个 Label 也可以被添加到任意数量的资源对象中,也可以在对象创建后动态添加或者删除。
  • 可以通过给指定的资源对象捆绑一个或多个不同的 Label,来实现多维度的资源分组管理功能。

 Label 选择器(Label selector)

Label 选择器 用于查询和筛选拥有某些 Label 的资源对象。标签选择器目前有两种:基于等值关系(等于、不等于)和基于集合关系(属于、不属于、存在)。

 Service

Service 是 Kubernetes 中用于解决 Pod IP 地址动态变化问题的核心概念。Service 可以看作一组提供相同服务的 Pod 的对外访问接口、流量均衡器。

特点:

  • Service 作用于哪些 Pod 是通过标签选择器来定义的。
  • 每个 Service 都有一个固定的虚拟 IP(Cluster IP),自动并且动态地绑定后端的 Pod,所有的网络请求直接访问 Service 的虚拟 IP,Service 会自动向后端做转发。
  • Service 除了提供稳定的对外访问方式之外,还能起到负载均衡(Load Balance)的功能,自动把请求流量分布到后端所有的服务上,Service 可以做到对客户透明地进行水平扩展(scale)。

 Ingress

Ingress 是 Kubernetes 集群的接入层,负责集群内外通讯。Ingress 是 Kubernetes 集群里工作在 OSI 网络参考模型下,第7层的应用,对外暴露的接口,典型的访问方式是 http/https。

特点:

  • Service 只能进行第四层的流量调度,表现形式是 ip+port。Ingress 则可以调度不同业务域、不同 URL 访问路径的业务流量。
  • 客户端请求通过 Ingress 转发到 Service,再由 Service 转发到 Pod。

 Name

Name 是 Kubernetes 内部资源对象的标识符。每种资源对象都应该有自己的名称,通常定义在资源的元数据信息里。在同一个 namespace 空间中必须是唯一的。

 Namespace

Namespace 是为了把一个 Kubernetes 集群划分为若干个资源不可共享的虚拟集群组而诞生的。不同 Namespace 内的资源名称可以相同,相同 Namespace 内的同种资源,名称不能相同。

特点:

  • 合理的使用 Kubernetes 的 Namespace,可以使得集群管理员能够更好的对交付到 Kubernetes 里的服务进行分类管理和浏览。
  • Kubernetes 里默认存在的 Namespace 有:default、kube-system、kube-public 等。
  • 查询 Kubernetes 里特定资源要带上相应的 Namespace。

Minikube
Minikube是一个工具,可以在本地快速运行一个单节点微型K8S,仅用于学习、预览K8S的一些特性使用。
部署地址:

Kubeadmin
Kubeadmin也是一个工具,提供kubeadm init和kubeadm join,用于快速部署K8S集群,相对简单。

二进制安装部署
生产首选,从官方下载发行版的二进制包,手动部署每个组件和自签TLS证书,组成K8S集群,新手推荐。


#关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X

#关闭selinux
setenforce 0
sed -i 's/enforcing/disabled/' /etc/selinux/config


#关闭swap
swapoff -a
sed -ri 's/.*swap.*/#&/' /etc/fstab 

#根据规划设置主机名
hostnamectl set-hostname master01
hostnamectl set-hostname node01
hostnamectl set-hostname node02

#在master添加hosts
cat >> /etc/hosts << EOF
192.168.192.80 master01
192.168.192.60 node01
192.168.192.70 node02
EOF


#调整内核参数
cat > /etc/sysctl.d/k8s.conf << EOF
#开启网桥模式,可将网桥的流量传递给iptables链
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
#关闭ipv6协议
net.ipv6.conf.all.disable_ipv6=1
net.ipv4.ip_forward=1
EOF

sysctl --system


#时间同步
yum install ntpdate -y
ntpdate time.windows.com


//所有 node 节点部署docker引擎
yum install -y yum-utils device-mapper-persistent-data lvm2 
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 
yum install -y docker-ce docker-ce-cli containerd.io


etcd是CoreOS团队于2013年6月发起的开源项目,它的目标是构建一个高可用的分布式键值(key-value)数据库。etcd内部采用raft协议作为一致性算法,etcd是go语言编写的。

etcd 作为服务发现系统,有以下的特点:
简单:安装配置简单,而且提供了HTTP API进行交互,使用也很简单
安全:支持SSL证书验证
快速:单实例支持每秒2k+读操作
可靠:采用raft算法,实现分布式系统数据的可用性和一致性

etcd 目前默认使用2379端口提供HTTP API服务, 2380端口和peer通信(这两个端口已经被IANA(互联网数字分配机构)官方预留给etcd)。 即etcd默认使用2379端口对外为客户端提供通讯,使用端口2380来进行服务器间内部通讯。
etcd 在生产环境中一般推荐集群方式部署。由于etcd 的leader选举机制,要求至少为3台或以上的奇数台。
 

---------- 准备签发证书环境 ----------

CFSSL 是 CloudFlare 公司开源的一款 PKI/TLS 工具。 CFSSL 包含一个命令行工具和一个用于签名、验证和捆绑 TLS 证书的 HTTP API 服务。使用Go语言编写。
CFSSL 使用配置文件生成证书,因此自签之前,需要生成它识别的 json 格式的配置文件,CFSSL 提供了方便的命令行生成配置文件。
CFSSL 用来为 etcd 提供 TLS 证书,它支持签三种类型的证书:
1、client 证书,服务端连接客户端时携带的证书,用于客户端验证服务端身份,如 kube-apiserver 访问 etcd;
2、server 证书,客户端连接服务端时携带的证书,用于服务端验证客户端身份,如 etcd 对外提供服务;
3、peer 证书,相互之间连接时使用的证书,如 etcd 节点之间进行验证和通信。
这里全部都使用同一套证书认证。


//在 master01 节点上操作  

#准备cfssl证书生成工具
wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64 -O /usr/local/bin/cfssl
wget https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64 -O /usr/local/bin/cfssljson
wget https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64 -O /usr/local/bin/cfssl-certinfo
 

chmod +x /usr/local/bin/cfssl*


cfssl:证书签发的工具命令
cfssljson:将 cfssl 生成的证书(json格式)变为文件承载式证书
cfssl-certinfo:验证证书的信息
cfssl-certinfo -cert <证书名称>            #查看证书的信息

生成Etcd证书
mkdir /opt/k8s
cd /opt/k8s/
#上传 etcd-cert.sh 和 etcd.sh 到 /opt/k8s/ 目录中
chmod +x etcd-cert.sh etcd.sh

#创建用于生成CA证书、etcd 服务器证书以及私钥的目录
mkdir /opt/k8s/etcd-cert
mv etcd-cert.sh etcd-cert/
cd /opt/k8s/etcd-cert/

#上传 etcd-v3.4.9-linux-amd64.tar.gz 到 /opt/k8s 目录中,启动etcd服务

cd /opt/k8s/
tar zxvf etcd-v3.4.9-linux-amd64.tar.gz


cd /opt/k8s/etcd-v3.4.9-linux-amd64/
mv etcd etcdctl /opt/etcd/bin/
cp /opt/k8s/etcd-cert/*.pem /opt/etcd/ssl/

https://blog.csdn.net/Jin_0612_/article/details/etcd.sh etcd01 192.168.192.80 etcd02=https://192.168.192.60:2380,etcd03=https://192.168.192.70:2380

#进入卡住状态等待其他节点加入,这里需要三台etcd服务同时启动,如果只启动其中一台后,服务会卡在那里,直到集群中所有etcd节点都已启动,可忽略这个情况

#可另外打开一个窗口查看etcd进程是否正常
ps -ef | grep etcd

#把etcd相关证书文件、命令文件和服务管理文件全部拷贝到另外两个etcd集群节点
scp -r /opt/etcd/ root@192.168.192.60:/opt/
scp -r /opt/etcd/ root@192.168.192.70:/opt/
scp /usr/lib/systemd/system/etcd.service root@192.168.192.60:/usr/lib/systemd/system/
scp /usr/lib/systemd/system/etcd.service root@192.168.192.70:/usr/lib/systemd/system/

//在 node01 节点上操作
vim /opt/etcd/cfg/etcd

#启动etcd服务
systemctl start etcd
systemctl enable etcd     systemctl enable --now etcd
systemctl在enable、disable、mask子命令里面增加了--now选项,可以激活同时启动服务,激活同时停止服务等。

systemctl status etcd

//在 node02 节点上操作
vim /opt/etcd/cfg/etcd

#启动etcd服务
systemctl start etcd
systemctl enable etcd
systemctl status etcd

#检查etcd群集状态

ETCDCTL_API=3   /opt/etcd/bin/etcdctl --cacert=/opt/etcd/ssl/ca.pem --cert=/opt/etcd/ssl/server.pem --key=/opt/etcd/ssl/server-key.pem --endpoints="https://192.168.192.80:2379,https://192.168.192.,https://192.168.192.70:2379" endpoint health --write-out=table

--cert-file:识别HTTPS端使用SSL证书文件
--key-file:使用此SSL密钥文件标识HTTPS客户端
--ca-file:使用此CA证书验证启用https的服务器的证书
--endpoints:集群中以逗号分隔的机器地址列表
cluster-health:检查etcd集群的运行状况

//在 master01 节点上操作

#上传 master.zip 和 k8s-cert.sh 到 /opt/k8s 目录中,解压 master.zip 压缩包
cd /opt/k8s/
unzip master.zip
chmod +x *.sh

#创建kubernetes工作目录
mkdir -p /opt/kubernetes/{bin,cfg,ssl,logs}

#创建用于生成CA证书、相关组件的证书和私钥的目录
mkdir /opt/k8s/k8s-cert
mv /opt/k8s/k8s-cert.sh /opt/k8s/k8s-cert
cd /opt/k8s/k8s-cert/
https://blog.csdn.net/Jin_0612_/article/details/k8s-cert.sh                #生成CA证书、相关组件的证书和私钥

#上传 kubernetes-server-linux-amd64.tar.gz 到 /opt/k8s/ 目录中,解压 kubernetes 压缩包

 

#复制master组件的关键命令文件到 kubernetes工作目录的 bin 子目录中
cd /opt/k8s/kubernetes/server/bin
cp kube-apiserver kubectl kube-controller-manager kube-scheduler /opt/kubernetes/bin/
ln -s /opt/kubernetes/bin/* /usr/local/bin/

#创建 bootstrap token 认证文件,apiserver 启动时会调用,然后就相当于在集群内创建了一个这个用户,接下来就可以用 RBAC 给他授权
cd /opt/k8s/
vim token.sh
#!/bin/bash
#获取随机数前16个字节内容,以十六进制格式输出,并删除其中空格
BOOTSTRAP_TOKEN=$(head -c 16 /dev/urandom | od -An -t x | tr -d ' ') 
#生成 token.csv 文件,按照 Token序列号,用户名,UID,用户组 的格式生成
cat > /opt/kubernetes/cfg/token.csv <<EOF
${BOOTSTRAP_TOKEN},kubelet-bootstrap,10001,"system:kubelet-bootstrap"
EOF

chmod +x token.sh
https://blog.csdn.net/Jin_0612_/article/details/token.sh

#二进制文件、token、证书都准备好后,开启 apiserver 服务
cd /opt/k8s/
https://blog.csdn.net/Jin_0612_/article/details/apiserver.sh 192.168.192.80 https://192.168.192.80:2379,https://192.168.192.60:2379,https://192.168.192.70:2379

netstat -natp | grep 6443   #安全端口6443用于接收HTTPS请求,用于基于Token文件或客户端证书等认证

#启动 scheduler 服务
cd /opt/k8s/
https://blog.csdn.net/Jin_0612_/article/details/scheduler.sh
ps aux | grep kube-scheduler

#启动 controller-manager 服务
https://blog.csdn.net/Jin_0612_/article/details/controller-manager.sh
ps aux | grep kube-controller-manager

#通过kubectl工具查看当前集群组件状态
kubectl get cs
NAME                 STATUS    MESSAGE             ERROR
controller-manager   Healthy   ok                  
scheduler            Healthy   ok                  
etcd-2               Healthy   {"health":"true"}   
etcd-1               Healthy   {"health":"true"}   
etcd-0               Healthy   {"health":"true"}  

//在所有 node 节点上操作
#创建kubernetes工作目录
mkdir -p /opt/kubernetes/{bin,cfg,ssl,logs}

#上传 node.zip 到 /opt 目录中,解压 node.zip 压缩包,获得kubelet.sh、proxy.sh
cd /opt/
unzip node.zip
chmod +x kubelet.sh proxy.sh

//在 master01 节点上操作
#把 kubelet、kube-proxy 拷贝到 node 节点
cd /opt/k8s/kubernetes/server/bin
scp kubelet kube-proxy root@192.168.192.60:/opt/kubernetes/bin/
scp kubelet kube-proxy root@192.168.192.70:/opt/kubernetes/bin/

#上传kubeconfig.sh文件到/opt/k8s/kubeconfig目录中,生成kubelet初次加入集群引导kubeconfig文件和kube-proxy.kubeconfig文件
#kubeconfig 文件包含集群参数(CA 证书、API Server 地址),客户端参数(上面生成的证书和私钥),集群 context 上下文参数(集群名称、用户名)。Kubenetes 组件(如 kubelet、kube-proxy)通过启动时指定不同的 kubeconfig 文件可以切换到不同的集群,连接到 apiserver。
mkdir /opt/k8s/kubeconfig

cd /opt/k8s/kubeconfig
chmod +x kubeconfig.sh
https://blog.csdn.net/Jin_0612_/article/details/kubeconfig.sh 192.168.192.80 /opt/k8s/k8s-cert/

#把配置文件 bootstrap.kubeconfig、kube-proxy.kubeconfig 拷贝到 node 节点
scp bootstrap.kubeconfig kube-proxy.kubeconfig root@192.168.192.60:/opt/kubernetes/cfg/
scp bootstrap.kubeconfig kube-proxy.kubeconfig root@192.168.192.70:/opt/kubernetes/cfg/

//在 node01 节点上操作
#启动 kubelet 服务
cd /opt/
https://blog.csdn.net/Jin_0612_/article/details/kubelet.sh 192.168.10.18
ps aux | grep kubelet

//在 master01 节点上操作,通过 CSR 请求
#检查到 node01 节点的 kubelet 发起的 CSR 请求,Pending 表示等待集群给该节点签发证书
kubectl get csr
NAME                                                   AGE  SIGNERNAME                                    REQUESTOR           CONDITION
node-csr-duiobEzQ0R93HsULoS9NT9JaQylMmid_nBF3Ei3NtFE   12s  kubernetes.io/kube-apiserver-client-kubelet   kubelet-bootstrap   Pending

#Approved,Issued 表示已授权 CSR 请求并签发证书
kubectl get csr
NAME                                                   AGE  SIGNERNAME                                    REQUESTOR           CONDITION
node-csr-duiobEzQ0R93HsULoS9NT9JaQylMmid_nBF3Ei3NtFE   2m5s kubernetes.io/kube-apiserver-client-kubelet   kubelet-bootstrap   Approved,Issued

#查看节点,由于网络插件还没有部署,节点会没有准备就绪 NotReady
kubectl get node
NAME            STATUS     ROLES    AGE    VERSION
192.168.192.60   NotReady   <none>   108s   v1.20.11

// node2与node1相同操作

//在 node01 节点上操作
#加载 ip_vs 模块
for i in $(ls /usr/lib/modules/$(uname -r)/kernel/net/netfilter/ipvs|grep -o "^[^.]*");do echo $i; /sbin/modinfo -F filename $i >/dev/null 2>&1 && /sbin/modprobe $i;done

#启动proxy服务
cd /opt/
https://blog.csdn.net/Jin_0612_/article/details/proxy.sh 192.168.192.60
ps aux | grep kube-proxy

//在 node01 节点上操作
#上传 cni-plugins-linux-amd64-v0.8.6.tgz 和 flannel.tar 到 /opt 目录中
cd /opt/
docker load -i flannel.tar

//在 master01 节点上操作
#上传 kube-flannel.yml 文件到 /opt/k8s 目录中,部署 CNI 网络
cd /opt/k8s
kubectl apply -f kube-flannel.yml 

kubectl get pods -n kube-system
NAME                    READY   STATUS    RESTARTS   AGE
kube-flannel-ds-hjtc7   1/1     Running   0          7s

kubectl get nodes
NAME            STATUS   ROLES    AGE   VERSION
192.168.10.18   Ready    <none>   81m   v1.20.11

到此这篇kubelet的作用(kubelet csi)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • consultant英语怎么读(consumption怎么读的)2025-01-06 22:09:04
  • dhcp获取ip地址失败怎么办(dhcp获取不了ip)2025-01-06 22:09:04
  • ddiction怎么读(ddecided怎么读)2025-01-06 22:09:04
  • conv2d参数解释(conv2d和conv1d)2025-01-06 22:09:04
  • uc代码是什么意思(uc网友提供的代码怎么用)2025-01-06 22:09:04
  • msvcp120.dll找不到(msvcp120.dll找不到是什么原因)2025-01-06 22:09:04
  • gitclone到本地(gitclone到本地修改后会影响源仓库吗)2025-01-06 22:09:04
  • console game(console games 翻译)2025-01-06 22:09:04
  • ceph存储优缺点(ceph存储过程)2025-01-06 22:09:04
  • sigmod会议 ccf(sigmod会议审稿时间)2025-01-06 22:09:04
  • 全屏图片