手动安装K8s记录

必要的工具安装

  • 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.pemkubernetes-key.pemkubernetes.pem 拷贝到 etcd 所在节点上,其中 kubernetes-key.pemkubernetes.pem 作为 etcd https 服务的 TLS 证书。

配置&部署控制节点服务

前置要求:kube-apiserver & kube-controller-manager & kube-scheduler & kubectl 二进制

api-server

在其启动参数中,需要

  1. 指定 CA 为 ca.pem
  2. 指定 etcd 的 CA 证书 ca.pem,公私钥为 kubernetes-key.pemkubernetes.pem、及 etcd 的访问地址
  3. 指定 k8s secrets 的秘钥为 encryption-config.yaml
  4. 指定 kubelet 的 CA 证书 ca.pem,公私钥为 kubernetes-key.pemkubernetes.pem
  5. 指定 api-server https 服务所用的 TLS 证书为 kubernetes-key.pemkubernetes.pem
  6. 指定 service account 的证书为 service-account.pem

controller-manager

在其启动参数中,需要

  1. 指定 cluster 所使用的 CA 的公私钥为 ca.pemca-key.pem
  2. 指定 kubeconfig 使用 kube-controller-manager.kubeconfig
  3. 指定 root CA 为 ca.pem
  4. 指定 service account 的私钥为 service-account-key.pem

scheduler

在启动参数中,指定配置文件 kube-scheduler.yaml,然后在 kube-scheduler.yaml 中指定 kubeconfig 为 kube-scheduler.kubeconfig


启动控制面服务 & 验证

给 kubelet 添加数据处理权限

创建 system:kube-apiserver-to-kubelet ClusterRolesystem:kube-apiserver ClusterRoleBinding 以允许请求 Kubelet API 和执行大部分来管理 Pods 的任务

配置&部署worker节点

  1. 安装 OS 依赖的组件:socat conntrack ipset
  2. 安装 CRI
  3. 安装 worker 节点所需的二进制:kubectlkube-proxykubelet默认提供的 CNI plugins

配置kubelet

创建 kubelet-config.yaml 文件,在该文件中指定

  1. CA 证书
  2. TLS 公私钥分别使用 worker-1.pemworker-1-key.pem。好家伙,kubelet 又是一个 https 服务。

并在 kubelet.service 指定

  1. 配置文件使用文件
  2. 指定 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
2
kubectl get componentstatuses
kubectl get nodes

安装其他重要的组件

  1. 安装 CNI
  2. DNS
  3. 验证
    1
    2
    3
    kubectl run busybox --image=busybox:1.28.3 --command -- sleep 3600
    kubectl get pods -l run=busybox
    kubectl exec -ti $POD_NAME -- nslookup kubernetes

烟雾测试

  1. 数据加密
  2. Deployment
    1. 创建
    2. 端口转发
    3. 容器日志
    4. 在容器中执行命令
  3. Service
    1. 创建
    2. 访问
作者

遇寻

发布于

2023-06-12

更新于

2023-06-12

许可协议

评论