kubernetes集群安装指南:kube-apiserver组件部署
发表于:2025-01-23 作者:千家信息网编辑
千家信息网最后更新 2025年01月23日,在kubernetes组件中,master节点组件主要包括:kube-apiserver,kube-controller-manager,kube-scheduler等三个组件,每个组件功能职责分工不
千家信息网最后更新 2025年01月23日kubernetes集群安装指南:kube-apiserver组件部署
在kubernetes组件中,master节点组件主要包括:kube-apiserver,kube-controller-manager,kube-scheduler等三个组件,每个组件功能职责分工不同,这里我们将三个组件部署在同一机器上,分别部署了三台机器。
1 安装准备
1.1 环境变量定义
#################### Variable parameter setting ######################KUBE_NAME=kube-apiserverK8S_INSTALL_PATH=/data/apps/k8s/kubernetesK8S_BIN_PATH=${K8S_INSTALL_PATH}/sbinK8S_LOG_DIR=${K8S_INSTALL_PATH}/logsK8S_CONF_PATH=/etc/k8s/kubernetesCA_DIR=/etc/k8s/sslSOFTWARE=/root/softwareVERSION=v1.14.2PACKAGE="kubernetes-server-${VERSION}-linux-amd64.tar.gz"DOWNLOAD_URL=""https://github.com/devops-apps/download/raw/master/kubernetes/${PACKAGE}"ETCD_ENDPOIDS=https://10.10.10.22:2379,https://10.10.10.23:2379,https://10.10.10.24:2379ETH_INTERFACE=eth2LISTEN_IP=$(ifconfig | grep -A 1 ${ETH_INTERFACE} |grep inet |awk '{print $2}')USER=k8sSERVICE_CIDR=10.254.0.0/22NODE_PORT_RANG=8400-9400
1.2 下载和分发 kubernetes 二进制文件
登陆devops机器,访问kubernetes github 官方地址下载稳定的 realease 包至本机;
wget $DOWNLOAD_URL -P $SOFTWARE
将kubernetes 软件包分发到各个master节点服务器;
sudo ansible master_k8s_vgs -m copy -a "src=${SOFTWARE}/$PACKAGE dest=${SOFTWARE}/" -b
2 安装kube-apiserver组件服务
2.1 安装kube-apiserver二进制文件
### 1.Check if the install directory exists.if [ ! -d "$K8S_BIN_PATH" ]; then mkdir -p $K8S_BIN_PATHfiif [ ! -d "$K8S_LOG_DIR/$KUBE_NAME" ]; then mkdir -p $K8S_LOG_DIR/$KUBE_NAMEfiif [ ! -d "$K8S_CONF_PATH" ]; then mkdir -p $K8S_CONF_PATHfi### 2.Install kube-apiserver binary of kubernetes.if [ ! -f "$SOFTWARE/kubernetes-server-${VERSION}-linux-amd64.tar.gz" ]; then wget $DOWNLOAD_URL -P $SOFTWARE >>/tmp/install.log 2>&1ficd $SOFTWARE && tar -xzf kubernetes-server-${VERSION}-linux-amd64.tar.gz -C ./cp -fp kubernetes/server/bin/$KUBE_NAME $K8S_BIN_PATHln -sf $K8S_BIN_PATH/$KUBE_NAM /usr/local/binchown -R $USER:$USER $K8S_INSTALL_PATHchmod -R 755 $K8S_INSTALL_PATH
2.3 分发 kubeconfig 文件和证书
分发证书
cd ${CA_DIR}sudo ansible master_k8s_vgs -m copy -a "src=ca.pem dest=${CA_DIR}/" -bsudo ansible master_k8s_vgs -m copy -a "src=ca-key.pem dest=${CA_DIR}/" -bsudo ansible master_k8s_vgs -m copy -a "src=kubernetes.pem dest=${CA_DIR}/" -bsudo ansible master_k8s_vgs -m copy -a "src=kubernetes-key.pem dest=${CA_DIR}/" -bsudo ansible master_k8s_vgs -m copy -a "src=proxy-clinet.pem dest=${CA_DIR}/" -b、sudo ansible master_k8s_vgs -m copy -a "src=proxy-client-key.pem dest=${CA_DIR}/" -b
- 因为master节点相关组件都部署在同一台节点上,所有这里把ca根证书公钥和私钥都同步到每个master节点主机上;
- proxy-client主要用于apiserver收集metric server资源使用;
2.4 创建审计策略文件
cat>${K8S_CONF_PATH}/audit-policy.yaml<
2.5 创建kube-apiserver 启动服务
at >/usr/lib/systemd/system/${KUBE_NAME}.service<
- --advertise-address:apiserver 对外通告的 IP(kubernetes 服务后端节点 IP);
- --default-*-toleration-seconds:设置节点异常相关的阈值;
- --max-*-requests-inflight:请求相关的最大阈值;
- --etcd-*:访问 etcd 的证书和 etcd 服务器地址;
- --experimental-encryption-provider-config:指定用于加密 etcd 中 secret 的配置;
- --bind-address: https 监听的 IP,不能为 127.0.0.1,否则外界不能访问它的安全端口 6443;
- --secret-port:https 监听端口;
- --insecure-port=0:关闭监听 http 非安全端口(8080);
- --tls-*-file:指定 apiserver 使用的证书、私钥和 CA 文件;
- --audit-*:配置审计策略和审计日志文件相关的参数;
- --client-ca-file:验证 client (kue-controller-manager、kube-scheduler、kubelet、kube-proxy 等)请求所带的证书;
- --enable-bootstrap-token-auth:启用 kubelet bootstrap 的 token 认证;
- --requestheader-*:kube-apiserver 的 aggregator layer 相关的配置参数,proxy-client & HPA 需要使用;
- --requestheader-client-ca-file:用于签名 --proxy-client-cert-file 和 --proxy-client-key-file 指定的证书;在启用了 metric aggregator 时使用;
- --requestheader-allowed-names:不能为空,值为逗号分割的 --proxy-client-cert-file 证书的 CN 名称,这里设置为 "aggregator";
- --service-account-key-file:签名 ServiceAccount Token 的公钥文件,kube-controller-manager 的 --service-account-private-key-file 指定私钥文件,两者配对使用;
- --runtime-config=api/all=true: 启用所有版本的 APIs,如 autoscaling/v2alpha1;
- --authorization-mode=Node,RBAC、--anonymous-auth=false: 开启 Node 和 RBAC 授权模式,拒绝未授权的请求;
- --enable-admission-plugins:启用一些默认关闭的 plugins;
- --allow-privileged:运行执行 privileged 权限的容器;
- --apiserver-count=3:指定 apiserver 实例的数量;
- --event-ttl:指定 events 的保存时间;
- --kubelet-:如果指定,则使用 https 访问 kubelet APIs;需要为证书对应的用户(上面 kubernetes.pem 证书的用户为 kubernetes) 用户定义 RBAC 规则,否则访问 kubelet API 时提示未授权;
- --proxy-client-*:apiserver 访问 metrics-server 使用的证书;
- --service-cluster-ip-range: 指定 Service Cluster IP 地址段;
- --service-node-port-range: 指定 NodePort 的端口范围;
- kube-apiserver 的 --requestheader-allowed-names 参数需要与metric证书CN字段一致,否则后续访问 metrics 时会提示权限不足。
- 如果 kube-apiserver 机器没有运行 kube-proxy,则还需要添加 --enable-aggregator-routing=true 参数;
关于 --requestheader-XXX 相关参数,参考:
https://github.com/kubernetes-incubator/apiserver-builder/blob/master/docs/conceptshttps://docs.bitnami.com/kubernetes/how-to/configure-autoscaling-custom-metrics/
注意:
- requestheader-client-ca-file 指定的 CA 证书,必须具有 client auth and server auth;
- 如果 --requestheader-allowed-names 为空,或者 --proxy-client-cert-file 证书的 CN 名称不在 allowed-names 中,则后续查看 node 或 pods 的 metrics 失败,提示:
- requestheader-client-ca-file 指定的 CA 证书,必须具有 client auth and server auth;
- 如果 --requestheader-allowed-names 为空,或者 --proxy-client-cert-file 证书的 CN 名称不在 allowed-names 中,则后续查看 node 或 pods 的 metrics 失败,提示:
###### Error from server (Forbidden): nodes.metrics.k8s.io is forbidden..
2.6 检查kube-apiserver服务及监听的端口
sudo systemctl status kube-apiserver |grep 'Active:'
确保状态为 active (running),否则查看日志,确认原因:
sudo journalctl -u kube-apiserver
2.7 打印 kube-apiserver 写入 etcd 的数据(可选)
ETCDCTL_API=3 etcdctl \ --endpoints=${ETCD_ENDPOINTS} \ --cacert=/etc/k8s/ssl/ca.pem \ --cert=/etc/k8s/ssl/etcd.pem \ --key=/etc/k8s/ssl/etcd-key.pem \ get /registry/ --prefix --keys-only
2.8 检查集群信息
kubectl cluster-info
2.9 授予 kube-apiserver 访问 kubelet API 的权限
在执行 kubectl exec、run、logs 等命令时,apiserver 会将请求转发到 kubelet 的 https 端口。这里定义 RBAC 规则,授权 apiserver 使用的证书(kubernetes.pem)用户名(CN:kuberntes)访问 kubelet API 的权限:
kubectl create \ clusterrolebinding kube-apiserver:kubelet-apis \ --clusterrole=system:kubelet-api-admin \ --user kubernetes
kube-apiserver安装完成,继续安装其他master组件:kube-controller-manager,具体安装文档请参考:kubernetes集群安装指南:kube-controller-manager组件集群部署,关于kube-apiserver脚本请从此处获取;
证书
组件
文件
节点
端口
服务
参数
机器
权限
用户
提示
监听
集群
名称
地址
审计
配置
安全
三个
二进制
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
lazarus数据库使用教程
数据库的无限大怎么表示
数据库sum的使用方法
服务器维修保障方案
国家网络安全人才学院
莆田燎倒网络技术有限公司
数据库不能启动3414
李刚巴州网络安全和信息化
phyton采集软件数据库
数据库中兴趣爱好的数据类型
网络安全 发展趋势
服务器业务系统防护
儿童拼图游戏软件开发
华为香港云服务器上怎样架设网站
大学生网络安全教育手抄报
莆田莆商互联网络科技有限公司
各关系型数据库语言优缺点
无线网络技术导论第二版
实现高并发http服务器
增加职工姓名的数据库代码
饭店信息系统中数据库设计的内容
3560服务器价格
松滋软件开发
数据库中注册信息表
如何管理好软件开发进度
教育科学期刊数据库英文版
网络技术选择题题库
南宁软件开发区域
服务器异常怎么登陆
计算机网络技术实训教案