手动安装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. 访问

解决自研CSI启动后无法使用且CSINode无驱动信息的问题

环境信息此处对一些信息做了模糊处理,不想因此导致一些信息泄露。A环境:跑在kata容器中的 OS;B环境:跑在虚拟机中的Ubuntu系统;X CSI:开发中的 CSI,目标是跑在 A 环境的 Kubernetes 中。问题描述当 X CSI 的服务在 A 环境中启动后,在宿主机的 /var/lib/
阅读更多

完整了解tar的使用及其有意思的花活

常用参数主要的操作模式(只能用一个)-c/--create 创建 tar 文件--delete 从 tar 文件中删除某个文件-r/--append 往 tar 文件尾部追加文件-u/--update 更新 tar 文件中的文件-t/--list 查看 tar 文件中的文件-x/--extract/
阅读更多

深入理解Kubernetes中Service的实现

iptables 是 Kubernetes 中 Service 的默认实现,了解 iptables 是理解 Service 工作原理不可缺少的一步。iptables 的构成在对包处理的过程中,内核添加了对包自定义处理的操作,这些自定义操作以链的形式存在,而链由表组成;每条链由不同的表组成,每个表由若
阅读更多

我敢打赌这不是你所认识的kubectl apply!

介绍与 kubectl apply 相关的几个概念、相关操作的主要逻辑,主要包括 Server Side Apply、Client Side Apply。一句话概述kubectl apply 执行时,先读取资源,再将资源更新到 apiserver。读取资源流程这里有被谭浩强i+++++i支配的恐惧(
阅读更多

在 Kubernetes 中遇见 NFS 存储

当在 K8s 中使用到 NFS 类型的存储时,首先需要搭建一个 NFS 服务,另外注意一个挂载路径问题,就能愉快地玩耍它啦。安装NFS服务sudo apt install -y nfs-kernel-server rpcbind创建目录 ~/nfs 作为共享目录,并在该目录下,新建一个文件 date
阅读更多

Kubernetes 中 apiserver 加载 schema 流程

在 apiserver 初始化、启动时,会加载所有能识别的 schema。加载的过程通过 import pkg 后,触发对应包下 init() 方法来加载。入口cmd/kube-apiserver/apiserver.go: 初始化 apiserver 命令行,并运行。func main() {co
阅读更多