k8s部署---master节点组件部署(三)
发表于:2025-12-01 作者:千家信息网编辑
千家信息网最后更新 2025年12月01日,kube-APIserver组件介绍kube-APIserver提供了k8s各类资源对象(pod,RC,Service等)的增删改查及watch等HTTP Rest接口,是整个系统的数据总线和数据中心
千家信息网最后更新 2025年12月01日k8s部署---master节点组件部署(三)
kube-APIserver组件介绍
- kube-APIserver提供了k8s各类资源对象(pod,RC,Service等)的增删改查及watch等HTTP Rest接口,是整个系统的数据总线和数据中心。
kube-APIserver的功能
- 提供了集群管理的REST API接口(包括认证授权、数据校验以及集群状态变更)
- 提供其他模块之间的数据交互和通信的枢纽(其他模块通过API Server查询或修改数据,只有API Server才直接操作etcd)
- 是资源配额控制的入口
- 拥有完备的集群安全机制
kube-apiserver工作原理图
kubernetes API的访问
- k8s通过kube-apiserver这个进程提供服务,该进程运行在单个k8s-master节点上。默认有两个端口
- 本地端口
- 该端口用于接收HTTP请求
- 该端口默认值为8080,可以通过API Server的启动参数"--insecure-port"的值来修改默认值
- 默认的IP地址为"localhost",可以通过启动参数"--insecure-bind-address"的值来修改该IP地址
- 非认证或授权的HTTP请求通过该端口访问API Server
- 安全端口
- 该端口默认值为6443,可通过启动参数"--secure-port"的值来修改默认值
- 默认IP地址为非本地(Non-Localhost)网络端口,通过启动参数"--bind-address"设置该值
- 该端口用于接收HTTPS请求
- 用于基于Tocken文件或客户端证书及HTTP Base的认证
- 用于基于策略的授权
- 默认不启动HTTPS安全访问控制
kube-controller-manager组件介绍
- kube-Controller Manager作为集群内部的管理控制中心,负责集群内的Node、Pod副本、服务端点(Endpoint)、命名空间(Namespace)、服务账号(ServiceAccount)、资源定额(ResourceQuota)的管理,当某个Node意外宕机时,Controller Manager会及时发现并执行自动化修复流程,确保集群始终处于预期的工作状态。
kube-scheduler组件介绍
- kube-scheduler是以插件形式存在的组件,正因为以插件形式存在,所以其具有可扩展可定制的特性。kube-scheduler相当于整个集群的调度决策者,其通过预选和优选两个过程决定容器的最佳调度位置。
- kube-scheduler(调度器)的指责主要是为新创建的pod在集群中寻找最合适的node,并将pod调度到Node上
- 从集群所有节点中,根据调度算法挑选出所有可以运行该pod的节点
- 再根据调度算法从上述node节点选择最优节点作为最终结果
- Scheduler调度器运行在master节点,它的核心功能是监听apiserver来获取PodSpec.NodeName为空的pod,然后为pod创建一个binding指示pod应该调度到哪个节点上,调度结果写入apiserver
kube-scheduler主要职责
- 集群高可用:如果 kube-scheduler 设置了 leader-elect 选举启动参数,那么会通过 etcd 进行节点选主( kube-scheduler 和 kube-controller-manager 都使用了一主多从的高可用方案)
- 调度资源监听:通过 list-Watch 机制监听 kube-apiserver 上资源的变化,这里的资源主要指的是 Pod 和 Node
- 调度节点分配:通过预选(Predicates)与优选(Priorites)策略,为待调度的 Pod 分配一个 Node 进行绑定并填充nodeName,同时将分配结果通过 kube-apiserver 写入 etcd
实验部署
实验环境
- Master01:192.168.80.12
- Node01:192.168.80.13
- Node02:192.168.80.14
- 本篇实验部署是接上篇文章Flannel部署的,所以实验环境不变,本次部署主要是部署master节点需要的组件
kube-APIserver组件部署
- master01服务器操作,配置apiserver自签证书
[root@master01 k8s]# cd /mnt/ //进入宿主机挂载目录[root@master01 mnt]# lsetcd-cert etcd-v3.3.10-linux-amd64.tar.gz k8s-cert.sh master.zipetcd-cert.sh flannel.sh kubeconfig.sh node.zipetcd.sh flannel-v0.10.0-linux-amd64.tar.gz kubernetes-server-linux-amd64.tar.gz[root@master01 mnt]# cp master.zip /root/k8s/ //复制压缩包到k8s工作目录[root@master01 mnt]# cd /root/k8s/ //进入k8s工作目录[root@master01 k8s]# lscfssl.sh etcd-v3.3.10-linux-amd64 kubernetes-server-linux-amd64.tar.gzetcd-cert etcd-v3.3.10-linux-amd64.tar.gz master.zipetcd.sh flannel-v0.10.0-linux-amd64.tar.gz[root@master01 k8s]# unzip master.zip //解压压缩包Archive: master.zipinflating: apiserver.shinflating: controller-manager.shinflating: scheduler.sh[root@master01 k8s]# mkdir /opt/kubernetes/{cfg,bin,ssl} -p //在master01中创建工作目录,之前在node节点中同样也创建过工作目录[root@master01 k8s]# mkdir k8s-cert //创建自签证书目录[root@master01 k8s]# cp /mnt/k8s-cert.sh /root/k8s/k8s-cert //将挂载的自签证书脚本移动到k8s工作目录中的自签证书目录[root@master01 k8s]# cd k8s-cert //进入目录[root@master01 k8s-cert]# vim k8s-cert.sh //编辑拷贝过来的脚本文件...cat > server-csr.json < 配置apiserver
[root@master01 k8s-cert]# cd .. //回到k8s工作目录[root@master01 k8s]# tar zxvf kubernetes-server-linux-amd64.tar.gz //解压软件包kubernetes/kubernetes/server/kubernetes/server/bin/...[root@master01 k8s]# cd kubernetes/server/bin/ //进入加压后软件命令存放目录[root@master01 bin]# lsapiextensions-apiserver kube-apiserver.docker_tag kube-proxycloud-controller-manager kube-apiserver.tar kube-proxy.docker_tagcloud-controller-manager.docker_tag kube-controller-manager kube-proxy.tarcloud-controller-manager.tar kube-controller-manager.docker_tag kube-schedulerhyperkube kube-controller-manager.tar kube-scheduler.docker_tagkubeadm kubectl kube-scheduler.tarkube-apiserver kubelet mounter[root@master01 bin]# cp kube-apiserver kubectl kube-controller-manager kube-scheduler /opt/kubernetes/bin/ //复制关键命令文件到k8s工作目录的bin目录中[root@master01 bin]# cd /root/k8s/[root@master01 k8s]# head -c 16 /dev/urandom | od -An -t x | tr -d ' ' //生成一个序列号c37758077defd4033bfe95a071689272[root@master01 k8s]# vim /opt/kubernetes/cfg/token.csv //创建token.csv文件,可以理解为创建一个管理性的角色c37758077defd4033bfe95a071689272,kubelet-bootstrap,10001,"system:kubelet-bootstrap" //指定用户角色身份,前面的序列号使用生成的序列号:wq[root@master01 k8s]# bash apiserver.sh 192.168.80.12 https://192.168.80.12:2379,https://192.168.80.13:2379,https://192.168.80.14:2379 //二进制文件,token,证书都准备好,执行apiserver脚本,同时生成配置文件 Created symlink from /etc/systemd/system/multi-user.target.wants/kube-apiserver.service to /usr/lib/systemd/system/kube-apiserver.service.[root@master01 k8s]# ps aux | grep kube //检查进程是否启动成功root 17088 8.7 16.7 402260 312192 ? Ssl 11:17 0:08 /opt/kubernetes/bin/kube-apiserver --logtostderr=true --v=4 --etcd-servers=https://192.168.80.12:2379,https://192.168.80.13:2379,https://192.168.80.14:2379 --bind-address=192.168.80.12 --secure-port=6443 --advertise-address=192.168.80.12 --allow-privileged=true --service-cluster-ip-range=10.0.0.0/24 --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,ResourceQuota,NodeRestriction --authorization-mode=RBAC,Node --kubelet-https=true --enable-bootstrap-token-auth --token-auth-file=/opt/kubernetes/cfg/token.csv --service-node-port-range=30000-50000 --tls-cert-file=/opt/kubernetes/ssl/server.pem --tls-private-key-file=/opt/kubernetes/ssl/server-key.pem --client-ca-file=/opt/kubernetes/ssl/ca.pem --service-account-key-file=/opt/kubernetes/ssl/ca-key.pem --etcd-cafile=/opt/etcd/ssl/ca.pem --etcd-certfile=/opt/etcd/ssl/server.pem --etcd-keyfile=/opt/etcd/ssl/server-key.pemroot 17101 0.0 0.0 112676 980 pts/0 S+ 11:19 0:00 grep --color=auto kube[root@master01 k8s]# cat /opt/kubernetes/cfg/kube-apiserver //查看生成的配置文件KUBE_APISERVER_OPTS="--logtostderr=true \--v=4 \--etcd-servers=https://192.168.80.12:2379,https://192.168.80.13:2379,https://192.168.80.14:2379 \--bind-address=192.168.80.12 \--secure-port=6443 \--advertise-address=192.168.80.12 \--allow-privileged=true \--service-cluster-ip-range=10.0.0.0/24 \--enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,ResourceQuota,NodeRestriction \--authorization-mode=RBAC,Node \--kubelet-https=true \--enable-bootstrap-token-auth \--token-auth-file=/opt/kubernetes/cfg/token.csv \--service-node-port-range=30000-50000 \--tls-cert-file=/opt/kubernetes/ssl/server.pem \--tls-private-key-file=/opt/kubernetes/ssl/server-key.pem \--client-ca-file=/opt/kubernetes/ssl/ca.pem \--service-account-key-file=/opt/kubernetes/ssl/ca-key.pem \--etcd-cafile=/opt/etcd/ssl/ca.pem \--etcd-certfile=/opt/etcd/ssl/server.pem \--etcd-keyfile=/opt/etcd/ssl/server-key.pem"[root@master01 k8s]# netstat -ntap | grep 6443 //查看监听的端口是否开启tcp 0 0 192.168.80.12:6443 0.0.0.0:* LISTEN 17088/kube-apiservetcp 0 0 192.168.80.12:48320 192.168.80.12:6443 ESTABLISHED 17088/kube-apiservetcp 0 0 192.168.80.12:6443 192.168.80.12:48320 ESTABLISHED 17088/kube-apiserve[root@master01 k8s]# netstat -ntap | grep 8080 //查看监听的端口是否开启tcp 0 0 127.0.0.1:8080 0.0.0.0:* LISTEN 17088/kube-apiserve- 配置scheduler服务
[root@master01 k8s]# ./scheduler.sh 127.0.0.1 //直接执行脚本,启动服务,并生成配置文件即可Created symlink from /etc/systemd/system/multi-user.target.wants/kube-scheduler.service to /usr/lib/systemd/system/kube-scheduler.service.[root@master01 k8s]# systemctl status kube-scheduler.service //查看服务运行状态● kube-scheduler.service - Kubernetes SchedulerLoaded: loaded (/usr/lib/systemd/system/kube-scheduler.service; enabled; vendor preset: disabled)Active: active (running) since 一 2020-02-10 11:22:13 CST; 2min 46s ago //成功运行 Docs: https://github.com/kubernetes/kubernetes ... - 配置controller-manager服务
[root@master01 k8s]# chmod +x controller-manager.sh //添加脚本执行权限[root@master01 k8s]# ./controller-manager.sh 127.0.0.1 //执行脚本,启动服务,并生成配置文件Created symlink from /etc/systemd/system/multi-user.target.wants/kube-controller-manager.service to /usr/lib/systemd/system/kube-controller-manager.service.[root@master01 k8s]# systemctl status kube-controller-manager.service //查看运行状态● kube-controller-manager.service - Kubernetes Controller Manager Loaded: loaded (/usr/lib/systemd/system/kube-controller-manager.service; enabled; vendor preset: disabled)Active: active (running) since 一 2020-02-10 11:28:21 CST; 7min ago //成功运行...[root@master01 k8s]# /opt/kubernetes/bin/kubectl get cs //查看节点运行状态NAME STATUS MESSAGE ERRORscheduler Healthy okcontroller-manager Healthy oketcd-2 Healthy {"health":"true"}etcd-0 Healthy {"health":"true"}etcd-1 Healthy {"health":"true"}master节点组件部署完成
节点
目录
地址
调度
端口
集群
工作
文件
服务
生成
运行
配置
组件
脚本
资源
参数
数据
状态
证书
监听
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
杭州易库网络技术有限公司
台州市龙讯网络技术有限公司
互联网企业是高科技吗
吃土豆服务器
设计logo免费软件开发
视频聊天软件开发一般哪家好
卫生健康网络安全研究现状
水务行业网络安全价格
成立网络安全公司
支付宝跑分软件开发裙
上不了网服务器连接失败
福州软件开发价格多少
发生内部服务器错误
幻塔星海ht1服务器进不去
网络安全检查情况汇总
华云服务器安全组配置在哪
软件开发阮强
一秒查询600次数据库
崇明区工业软件开发收费
网络安全特殊黑客
网络安全护卫队面试
秦苍科技 软件开发
云服务器连接路由器
网络安全什么时候是风口
杭州众人互联网科技公司
郑州影讯网络技术
c语言开发内存数据库
单位网络安全预警管理办法
中华人民共和国网络安全法介绍
江苏hpe塑合型服务器哪家好