前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >Kubernetes(k8s)-master组件介绍

Kubernetes(k8s)-master组件介绍

作者头像
运维小路
发布2024-12-25 15:52:31
发布2024-12-25 15:52:31
11400
代码可运行
举报
文章被收录于专栏:运维小路
运行总次数:0
代码可运行

我们上一章介绍了Docker基本情况,目前在规模较大的容器集群基本都是Kubernetes,但是Kubernetes涉及的东西和概念确实是太多了,而且随着版本迭代功能在还增加,笔者有些功能也确实没用过,所以只能按照我自己的理解来讲解。

我们在上一小节介绍静态pod,而在k8s的第一节我们就介绍了master的哪些组件,下图就是标准k8s下的4个静态pod文件的yaml文件。

1.Etcd:作为集群的数据存储,用于存储集群的配置信息、状态和元数据。etcd 是一个分布式、可靠且高度可用的键值存储系统,用于保证集群的一致性和持久性。

代码语言:javascript
代码运行次数:0
复制
#下面就是etcd的启动命令
#这里的参数其实比较少,大部分都是和ip和证书相关。
- command:
    - etcd
    - --advertise-client-urls=https://192.168.31.211:2379
    - --cert-file=/etc/kubernetes/pki/etcd/server.crt
    - --client-cert-auth=true
    - --data-dir=/var/lib/etcd
    - --experimental-initial-corrupt-check=true
    - --initial-advertise-peer-urls=https://192.168.31.211:2380
    - --initial-cluster=master01=https://192.168.31.211:2380
    - --key-file=/etc/kubernetes/pki/etcd/server.key
    - --listen-client-urls=https://127.0.0.1:2379,https://192.168.31.211:2379
    - --listen-metrics-urls=http://127.0.0.1:2381
    - --listen-peer-urls=https://192.168.31.211:2380
    - --name=master01
    - --peer-cert-file=/etc/kubernetes/pki/etcd/peer.crt
    - --peer-client-cert-auth=true
    - --peer-key-file=/etc/kubernetes/pki/etcd/peer.key
    - --peer-trusted-ca-file=/etc/kubernetes/pki/etcd/ca.crt
    - --snapshot-count=10000
    - --trusted-ca-file=/etc/kubernetes/pki/etcd/ca.crt

etcd实际上只有一个业务进程会使用他,那就是kube-apiserver,如果etcd异常,则kube-apiserver也会异常无法启动。单节点只要数据没问题,则基本都可以正常启动。etcd的高可用是通过组件etcd集群来实现(etcd本身就是一个分布式集群)。

2.API Server:作为集群的统一入口,提供 API 用于与集群交互,包括创建、删除和管理资源等操作。所有的 Kubernetes API 请求都通过 API Server 进行处理。其他组件不会相互通信,包括Node的组件都只和APL Server通信

代码语言:javascript
代码运行次数:0
复制
 #下面是kube-apiserver的启动参数
 - command:
    - kube-apiserver
    - --advertise-address=192.168.31.211
    - --allow-privileged=true
    - --authorization-mode=Node,RBAC
    - --client-ca-file=/etc/kubernetes/pki/ca.crt
    - --enable-admission-plugins=NodeRestriction
    - --enable-bootstrap-token-auth=true
    - --etcd-cafile=/etc/kubernetes/pki/etcd/ca.crt
    - --etcd-certfile=/etc/kubernetes/pki/apiserver-etcd-client.crt
    - --etcd-keyfile=/etc/kubernetes/pki/apiserver-etcd-client.key
    - --etcd-servers=https://127.0.0.1:2379
    - --kubelet-client-certificate=/etc/kubernetes/pki/apiserver-kubelet-client.crt
    - --kubelet-client-key=/etc/kubernetes/pki/apiserver-kubelet-client.key
    - --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname
    - --proxy-client-cert-file=/etc/kubernetes/pki/front-proxy-client.crt
    - --proxy-client-key-file=/etc/kubernetes/pki/front-proxy-client.key
    - --requestheader-allowed-names=front-proxy-client
    - --requestheader-client-ca-file=/etc/kubernetes/pki/front-proxy-ca.crt
    - --requestheader-extra-headers-prefix=X-Remote-Extra-
    - --requestheader-group-headers=X-Remote-Group
    - --requestheader-username-headers=X-Remote-User
    - --secure-port=6443
    - --service-account-issuer=https://kubernetes.default.svc.cluster.local
    - --service-account-key-file=/etc/kubernetes/pki/sa.pub
    - --service-account-signing-key-file=/etc/kubernetes/pki/sa.key
    - --service-cluster-ip-range=10.96.0.0/12
    - --tls-cert-file=/etc/kubernetes/pki/apiserver.crt
    - --tls-private-key-file=/etc/kubernetes/pki/apiserver.key

kube-apiserver需要依赖etcd正常,才可以正常启动,一般情况下只要etcd正常则kube-apiserver一般没问题,当然证书,时间这些也会影响kube-apiserver的启动。kube-apiserver的本身就是无状态的,只要能正常连接etcd,他在多个节点启用就可以实现高可用。

3.Controller Manager:负责管理和运行集群中的控制器。控制器用于监控集群的状态,并根据预期状态与实际状态的差异进行调整。例如,Replication Controller 负责确保 Pod 的副本数符合预期,Namespace Controller 负责管理命名空间等。

代码语言:javascript
代码运行次数:0
复制
 #kube-controller-manager的启动参数
  - command:
    - kube-controller-manager
    - --allocate-node-cidrs=true
    - --authentication-kubeconfig=/etc/kubernetes/controller-manager.conf
    - --authorization-kubeconfig=/etc/kubernetes/controller-manager.conf
    - --bind-address=127.0.0.1
    - --client-ca-file=/etc/kubernetes/pki/ca.crt
    - --cluster-cidr=10.244.0.0/16
    - --cluster-name=kubernetes
    - --cluster-signing-cert-file=/etc/kubernetes/pki/ca.crt
    - --cluster-signing-key-file=/etc/kubernetes/pki/ca.key
    - --controllers=*,bootstrapsigner,tokencleaner
    - --kubeconfig=/etc/kubernetes/controller-manager.conf
    - --leader-elect=true
    - --requestheader-client-ca-file=/etc/kubernetes/pki/front-proxy-ca.crt
    - --root-ca-file=/etc/kubernetes/pki/ca.crt
    - --service-account-private-key-file=/etc/kubernetes/pki/sa.key
    - --service-cluster-ip-range=10.96.0.0/12
    - --use-service-account-credentials=true

kube-controller-manager也只依赖kube-apiserver,本组件其实也是很多控制组件的集合,如果本地组件挂掉,已有的业务是可以正常使用的,但是如果某些组件出现不符合预期的情况,控制组件挂断以后他将无法按照预期样子恢复。kube-controller-manager的高可用和kube-scheduler高可用是一样,会进行选主操作,如果存在一个多个情况下,则只有一个leader在提供服务,其他都不提供服务。而下面这个参数就是实现参数。

代码语言:javascript
代码运行次数:0
复制
#启用选主
- --leader-elect=true

4.Scheduler:负责根据预定的策略将 Pod 分配到集群中的节点上。Scheduler 考虑诸如节点资源、Pod 的需求和亲和性/反亲和性规则等因素来进行调度决策,以实现负载均衡和高可用性。

代码语言:javascript
代码运行次数:0
复制
  #Scheduler的启动命令
  - command:
    - kube-scheduler
    - --authentication-kubeconfig=/etc/kubernetes/scheduler.conf
    - --authorization-kubeconfig=/etc/kubernetes/scheduler.conf
    - --bind-address=127.0.0.1
    - --kubeconfig=/etc/kubernetes/scheduler.conf
    - --leader-elect=true

kube-Scheduler也只依赖kube-apiserver,这个和kube-controller-manager挂掉以后情况比较类似,也是已有的业务不影响使用,但是后面的调度则不能完成。

5.总结

这4个组件就是master的核心组件,etcd作为数据库给kube-apiserver使用,而作为核心kube-apiserver又向kube-controller-manager和kube-scheduler提供服务。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-12-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 运维小路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档