手动安装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。

验证

kubectl get componentstatuses
kubectl get nodes

安装其他重要的组件

  1. 安装 CNI
  2. DNS
  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
  3. 创建
  4. 端口转发
  5. 容器日志
  6. 在容器中执行命令
  7. Service
  8. 创建
  9. 访问

Read more

容器镜像(4):镜像的常用工具箱

容器镜像(4):镜像的常用工具箱

前几篇在讲多架构镜像时已经用过 skopeo 和 crane 做镜像复制,这篇系统整理这两个工具的完整能力,同时介绍几个日常操作镜像时同样好用的工具。 一、skopeo:不依赖 Daemon 的镜像瑞士军刀 skopeo 的核心价值是绕过 Docker daemon,直接与 Registry API 交互。上一篇用它做镜像复制和离线传输,但它的能力远不止于此。 1.1 安装 # Ubuntu / Debian sudo apt install -y skopeo skopeo --version # skopeo version 1.15.1 1.2 inspect:免拉取检查镜像元数据 docker inspect 需要先把镜像拉到本地,skopeo inspect 直接向 Registry

容器镜像(3):多架构镜像构建

容器镜像(3):多架构镜像构建

一、什么是多架构镜像 1.1 OCI Image Index 上一篇介绍了单平台镜像的结构:一个 Manifest 指向 Config 和若干 Layer blob。多架构镜像在此之上多了一层——OCI Image Index(也叫 Manifest List),是一个轻量的索引文件,把多个单平台 Manifest 组织在一起: $ docker manifest inspect golang:1.22-alpine { "schemaVersion": 2, "mediaType": "application/vnd.oci.image.index.v1+json", "manifests&

容器镜像(2):containerd 视角下的镜像

容器镜像(2):containerd 视角下的镜像

一、为什么需要了解 containerd 如果你只用 docker run 跑容器,从来不关心底层,那可以不了解 containerd。但如果你在用 Kubernetes,或者想真正理解"容器运行时"是什么,containerd 是绕不开的。 事实上,当你执行 docker run 的时候,containerd 早就在后台悄悄工作了——Docker 从 1.11 版本开始,就把核心运行时剥离出来交给 containerd 负责。 1.1 Docker 的架构演变 早期的 Docker(1.10 及之前)是一个"大一统"的单体程序:一个 dockerd