必要的工具安装
- cfssl
- cfssljson
- kubectl
证书与CA
配置和生成kubeconfig
- kubelet 配置文件
worker-n.kubeconfig,分发到所有 worker 节点上。
- kube-proxy 配置文件
kube-proxy.kubeconfig,分发到所有 worker 节点上。
- kube-controller-manager 配置文件
kube-controller-manager.kubeconfig,分发到所有 控制节点 上。
- kube-scheduler 配置文件
kube-scheduler.kubeconfig,分发到所有 控制节点 上。
- Admin 配置文件
admin.kubeconfig,分发到所有 控制节点 上。
配置加密k8s secrets的秘钥
encryption-config.yaml,分发到所有 控制节点 上。
配置&部署etcd
前置要求:etcd & etcdctl 二进制
将 ca.pem
、kubernetes-key.pem
、kubernetes.pem
拷贝到 etcd 所在节点上,其中 kubernetes-key.pem
、kubernetes.pem
作为 etcd https 服务的 TLS 证书。
配置&部署控制节点服务
前置要求:kube-apiserver & kube-controller-manager & kube-scheduler & kubectl 二进制
api-server
在其启动参数中,需要
- 指定 CA 为
ca.pem
- 指定 etcd 的 CA 证书
ca.pem
,公私钥为kubernetes-key.pem
、kubernetes.pem
、及 etcd 的访问地址 - 指定 k8s secrets 的秘钥为
encryption-config.yaml
- 指定 kubelet 的 CA 证书
ca.pem
,公私钥为kubernetes-key.pem
、kubernetes.pem
- 指定 api-server https 服务所用的 TLS 证书为
kubernetes-key.pem
、kubernetes.pem
- 指定 service account 的证书为
service-account.pem
controller-manager
在其启动参数中,需要
- 指定 cluster 所使用的 CA 的公私钥为
ca.pem
、ca-key.pem
- 指定 kubeconfig 使用 kube-controller-manager.kubeconfig
- 指定 root CA 为
ca.pem
- 指定 service account 的私钥为
service-account-key.pem
scheduler
在启动参数中,指定配置文件 kube-scheduler.yaml
,然后在 kube-scheduler.yaml
中指定 kubeconfig 为 kube-scheduler.kubeconfig
。
启动控制面服务 & 验证
给 kubelet 添加数据处理权限
创建 system:kube-apiserver-to-kubelet
ClusterRole 及 system:kube-apiserver
ClusterRoleBinding 以允许请求 Kubelet API 和执行大部分来管理 Pods 的任务
配置&部署worker节点
- 安装 OS 依赖的组件:socat conntrack ipset
- 安装 CRI
- 安装 worker 节点所需的二进制:
kubectl
、kube-proxy
、kubelet
、默认提供的 CNI plugins
配置kubelet
创建 kubelet-config.yaml
文件,在该文件中指定
- CA 证书
- TLS 公私钥分别使用
worker-1.pem
、worker-1-key.pem
。好家伙,kubelet 又是一个 https 服务。
并在 kubelet.service
指定
- 配置文件使用文件
- 指定 kubelet 所使用的 kubeconfig 为 worker-n.kubeconfig
配置kube-proxy
创建 kube-proxy-config.yaml
文件,在该文件中指定所用的 kubeconfig 为 kube-proxy.kubeconfig
;再在 kubelet.service
指定使用此配置文件。
启动控制面服务
配置 kubectl 所使用的 kubeconfig
使用 admin.pem 和 admin-key.pem 生成 kubeconfig。
验证
1 | kubectl get componentstatuses |
安装其他重要的组件
- 安装 CNI
- DNS
- 验证
1
2
3kubectl run busybox --image=busybox:1.28.3 --command -- sleep 3600
kubectl get pods -l run=busybox
kubectl exec -ti $POD_NAME -- nslookup kubernetes
烟雾测试
- 数据加密
- Deployment
- 创建
- 端口转发
- 容器日志
- 在容器中执行命令
- Service
- 创建
- 访问