kubernetes部署 kube-apiserver服务
kubernetes部署 kube-apiserver 组件
本文档讲解使用 keepalived 和 haproxy 部署一个 3 节点高可用 master 集群的步骤。
kube-apiserver 集群各节点的名称和 IP 如下:
kube-node0:192.168.111.10
kube-node1:192.168.111.11
kube-node2:192.168.111.12
创建 kubernetes 证书和私钥
其中会用到上面的三个主机IP,一个vip(192.168.111.9),这些都是kube-apiserver的对外提供服务的IP,还有就是kubernetes本身会创建一个service,它的IP是我们在启动kube-apiserver是定义的--service-cluster-ip-range 参数指定的IP地址段(10.254.0.0/24,)的第一个IP地址,后续可以通过kubectl get svc kubernetes命令获取。
- cat > kubernetes-csr.json <<EOF
- {
- "CN": "kubernetes",
- "hosts": [
- "127.0.0.1",
- "192.168.111.9",
- "192.168.111.10",
- "192.168.111.11",
- "192.168.111.12",
- "10.254.0.1",
- "kubernetes",
- "kubernetes.default",
- "kubernetes.default.svc",
- "kubernetes.default.svc.cluster",
- "kubernetes.default.svc.cluster.local"
- ],
- "key": {
- "algo": "rsa",
- "size": 2048
- },
- "names": [
- {
- "C": "CN",
- "ST": "ChongQing",
- "L": "ChongQing",
- "O": "k8s",
- "OU": "yunwei"
- }
- ]
- }
- EOF
生成认证文件:
- cfssl gencert -ca=/etc/kubernetes/ca/ca.pem \
- -ca-key=/etc/kubernetes/ca/ca-key.pem \
- -config=/etc/kubernetes/ca/ca-config.json \
- -profile=kubernetes kubernetes-csr.json | cfssljson -bare kubernetes
将生成的证书和私钥文件拷贝到其他kube-apiserver节点
# scp /etc/kubernetes/ca/kubernetes* 192.168.111.11:/etc/kubernetes/ca/
# scp /etc/kubernetes/ca/kubernetes* 192.168.111.12:/etc/kubernetes/ca/
生成token认证文件
#生成随机token
# head -c 16 /dev/urandom | od -An -t x | tr -d ' '
8afdf3c4eb7c74018452423c29433609
#按照固定格式写入token.csv,注意替换token内容
# echo "8afdf3c4eb7c74018452423c29433609,kubelet-bootstrap,10001,\"system:kubelet-bootstrap\"" > /etc/kubernetes/ca/token.csv
kube-apiserver的配置文件,三台一样(配置文件中将127.0.0.1的非https的api开放,在kube-scheduler服务和kube-controller-manager服务就可以不用认证授权了。):
- cat > /lib/systemd/system/kube-apiserver.service <<EOF
- [Unit]
- Description=Kubernetes API Server
- Documentation=https://github.com/GoogleCloudPlatform/kubernetes
- After=network.target
- [Service]
- ExecStart=/usr/local/bin/kube-apiserver \
- --admission-control=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,ResourceQuota,NodeRestriction \
- --insecure-bind-address=127.0.0.1 \
- --kubelet-https=true \
- --bind-address=192.168.111.12 \
- --authorization-mode=Node,RBAC \
- --runtime-config=api/all \
- --enable-bootstrap-token-auth \
- --token-auth-file=/etc/kubernetes/ca/token.csv \
- --tls-cert-file=/etc/kubernetes/ca/kubernetes.pem \
- --tls-private-key-file=/etc/kubernetes/ca/kubernetes-key.pem \
- --client-ca-file=/etc/kubernetes/ca/ca.pem \
- --service-account-key-file=/etc/kubernetes/ca/ca-key.pem \
- --etcd-cafile=/etc/kubernetes/ca/ca.pem \
- --etcd-certfile=/etc/kubernetes/ca/kubernetes.pem \
- --etcd-keyfile=/etc/kubernetes/ca/kubernetes-key.pem \
- --service-cluster-ip-range=10.254.0.0/16 \
- --etcd-servers=https://192.168.111.10:2379,https://192.168.111.11:2379,https://192.168.111.12:2379 \
- --enable-swagger-ui=true \
- --allow-privileged=true \
- --audit-log-maxage=30 \
- --audit-log-maxbackup=3 \
- --audit-log-maxsize=100 \
- --audit-log-path=/var/lib/audit.log \
- --v=2
- Restart=on-failure
- RestartSec=5
- Type=notify
- LimitNOFILE=65536
- [Install]
- WantedBy=multi-user.target
- EOF
systemctl daemon-reload && for SERVICES in kube-apiserver;do systemctl enable $SERVICES; systemctl restart $SERVICES; systemctl status $SERVICES; done
打印 kube-apiserver 写入 etcd 的数据
- ETCDCTL_API=3 etcdctl \
- --endpoints=https://192.168.111.10:2379,https://192.168.111.11:2379,https://192.168.111.12:2379 \
- --cacert=/etc/kubernetes/ca/ca.pem \
- --cert=/etc/kubernetes/ca/etcd.pem \
- --key=/etc/kubernetes/ca/etcd-key.pem \
- get /registry/ --prefix --keys-only
部署 kubectl 命令行工具
- cat > admin-csr.json <<EOF
- {
- "CN": "admin",
- "hosts": [],
- "key": {
- "algo": "rsa",
- "size": 2048
- },
- "names": [
- {
- "C": "CN",
- "ST": "ChongQing",
- "L": "ChongQing",
- "O": "system:masters",
- "OU": "yunwei"
- }
- ]
- }
- EOF
生成认证文件:
- cfssl gencert -ca=/etc/kubernetes/ca/ca.pem \
- -ca-key=/etc/kubernetes/ca/ca-key.pem \
- -config=/etc/kubernetes/ca/ca-config.json \
- -profile=kubernetes admin-csr.json | cfssljson -bare admin
生成kubectl的config文件(可以三台都执行一遍,也可以一台执行后复制过去):
- kubectl config set-cluster kubernetes \
- --certificate-authority=/etc/kubernetes/ca/ca.pem \
- --embed-certs=true \
- --server=https://192.168.111.9:8443
- kubectl config set-credentials admin \
- --client-certificate=/etc/kubernetes/ca/admin.pem \
- --client-key=/etc/kubernetes/ca/admin-key.pem \
- --embed-certs=true
- kubectl config set-context kubernetes \
- --cluster=kubernetes \
- --user=admin
- kubectl config use-context kubernetes
mkdir -p ~/.kube
scp ~/.kube/config 192.168.111.11:~/.kube/config
scp ~/.kube/config 192.168.111.12:~/.kube/config
检查集群信息(任意一台)
- # kubectl cluster-info
- Kubernetes master is running at https://192.168.111.9:8443
- To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
- # kubectl get all --all-namespaces
- NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
- default service/kubernetes ClusterIP 10.254.0.1 <none> 443/TCP 34d
- # kubectl get componentstatuses
- NAME STATUS MESSAGE ERROR
- scheduler Unhealthy Get http://127.0.0.1:10251/healthz: dial tcp 127.0.0.1:10251: connect: connection refused
- controller-manager Unhealthy Get http://127.0.0.1:10252/healthz: dial tcp 127.0.0.1:10252: connect: connection refused
- etcd-2 Healthy {"health": "true"}
- etcd-0 Healthy {"health": "true"}
- etcd-1 Healthy {"health": "true"}
检查 kube-apiserver 监听的端口
6443: 接收 https 请求的安全端口,对所有请求做认证和授权
- # ss -netstat -lnpt|grep kube
- LISTEN 0 128 192.168.111.12:6443 *:* users:(("kube-apiserver",pid=878,fd=3)) timer:(keepalive,031ms,0) ino:23491 sk:ffff880078d34d80 <->
- LISTEN 0 128 127.0.0.1:8080 *:* users:(("kube-apiserver",pid=4168,fd=68)) ino:35479 sk:ffff88002391ec80 <->
kubernetes部署 kube-apiserver服务的更多相关文章
- 第11篇Kubernetes部署微服务电商平台
kubernetes部署sock-shop微服务电商平台: 准备条件 确保kubernetes可以访问:reg.yunwei.edu镜像库 需要准备镜像: 部署微服务 ...
- Kubernetes 部署集群内部DNS服务
Kubernetes 部署集群内部DNS服务 部署官网:https://github.com/kubernetes/kubernetes/tree/master/cluster/addons/dns/ ...
- 如何在 Intellij IDEA 更高效地将应用部署到容器服务 Kubernetes
前言 在之前的一篇文章中,我们介绍了 如何将一个本地的 Java 应用程序直接部署到阿里云 ECS ,有不少读者反馈,如果目前已经在使用阿里云容器服务 Kubernetes 了,那该如何配合这个插件部 ...
- Kubernetes 部署微服务电商平台(16)
一.概念 微服务就是很小的服务,小到一个服务只对应一个单一的功能,只做一件事.这个服务可以单独部署运行,服务之间可以通过RPC来相互交互,每个微服务都是由独立的小团队开发,测试,部署,上线,负责它的整 ...
- Kubernetes 部署 Nebula 图数据库集群
Kubernetes 是什么 Kubernetes 是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes 的目标是让部署容器化的应用简单并且高效,Kubernetes 提供了应 ...
- 为什么 kubernetes 天然适合微服务
最近总在思考,为什么在支撑容器平台和微服务的竞争中,Kubernetes 会取得最终的胜出,事实上从很多角度出发三大容器平台从功能方面来看,最后简直是一摸一样.(可参考<容器平台选型的十大模式: ...
- Docker集群管理工具 - Kubernetes 部署记录 (运维小结)
一. Kubernetes 介绍 Kubernetes是一个全新的基于容器技术的分布式架构领先方案, 它是Google在2014年6月开源的一个容器集群管理系统,使用Go语言开发,Kubernete ...
- 为什么 kubernetes 天然适合微服务 (3)
此文已由作者刘超授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验 四.Kubernetes 本身就是微服务架构 基于上面这十个设计要点,我们再回来看 Kubernetes,会发现 ...
- kubernetes部署jenkins(Docker in Docker)及认证
引言 Jenkins是一款开源 CI&CD 软件,用于自动化各种任务,包括构建.测试和部署软件. 本文将Jenkins的master与slave置于Pod中,部署在namespace:jenk ...
随机推荐
- 安装hexo博客
前言 ** 跟着步骤一步一步来进行安装 ** 准备环境:node.js和包管理器npm 1:查看包文件 接着安装 淘宝镜像源 sudo这个需要添加获取文件夹访问权限 sudo npm install ...
- 使用spire.doc导出支持编辑Latex公式的标准格式word
背景 之前有的教辅标注需求,在导出题库的时候希望顺便导出可以查看word,方便线下预览成品效果,因为只是用来预览并且为了沿用前端的样式,当时方案就是直接生成html,写个word的文件头,这样就可以用 ...
- 手把手教你学Dapr - 3. 使用Dapr运行第一个.Net程序
上一篇:手把手教你学Dapr - 2. 必须知道的概念 注意: 文章中提到的命令行工具即是Windows Terminal/PowerShell/cmd其中的一个,推荐使用Windows Termin ...
- 数据流中的中位数 牛客网 剑指Offer
数据流中的中位数 牛客网 剑指Offer 题目描述 如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值.如果从数据流中读出偶数个数值,那么中位数就 ...
- Python import Queue ImportError: No module named 'Queue'
python3 中引入Queue 会报出这个问题 python3 中这样引入 import queue python2 中这样引入 import Queue 为了兼容 可以这样 import sys ...
- sqlldr 导入有中文乱码问题
1.导入成功后,查看导入数据有乱码 2.查看字符集为uft8 select * from v$nls_parameters where PARAMETER like '%NLS_CHARACTERSE ...
- CLion 2021.2 debug报错 process exited with status -1 (attach failed (Not allowed to attach to process.
Clion 升级 2021.2 版本后 debug 报错: process exited with status -1 (attach failed (Not allowed to attach to ...
- connect & send 在三次握手过程中的有趣问题
一.问题回顾 面试的时候被问到的问题,原问题是: 1:写一下socket网络编程服务端和客户端常用的函数. 2:如果服务端在listen之后没有accept,那客户端的connect会返回吗?为什么? ...
- 03 | 变量的解构赋值 | es6
变量的解构赋值 数组的解构赋值 基本用法 ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构(Destructuring). 以前,为变量赋值,只能直接指定值. let a ...
- PTA甲级1094 The Largest Generation (25分)
PTA甲级1094 The Largest Generation (25分) A family hierarchy is usually presented by a pedigree tree wh ...