kubeadm 常用命令行选项

kubeadm init

“init”命令执行以下阶段

  • preflight Run pre-flight checks
  • kubelet-start Write kubelet settings and (re)start the kubelet
  • certs Certificate generation
    • /ca Generate the self-signed Kubernetes CA to provision identities for other Kubernetes components
    • /apiserver Generate the certificate for serving the Kubernetes API
    • /apiserver-kubelet-client Generate the certificate for the API server to connect to kubelet
    • /front-proxy-ca Generate theself-signed CA to provision identities for front proxy
    • /front-proxy-client Generate the certificate for the front proxy client
    • /etcd-ca Generate the self-signed CA to provision identities for etcd
    • /etcd-server Generate the certificate for serving etcd
    • /etcd-peer Generate the certificate for etcd nodes to communicate with each other
    • /etcd-healthcheck-client Generate the certificate for liveness probes to healthcheck etcd
    • /apiserver=etcd-client Generate the certificate for apiserver uses to access etcd
  • kubeconfig Genera all kubeconfig files necessary to establish the control plane and the admin kubeconfig file
    • /admin Generate a kubeconfig file for the admin to use and for kubeadm itself
    • /kubelet Generate a kubeconfig file for the kubelet to use only forcluster bootstrapping purpose
    • /controller-manager Generate a kubeconfig file for the controller manager to use
    • /scheduler Generate a kubeconfig file for the scheduler to use
  • control-plane Generate all static Pod manifest files necessary to establish the control plane
    • /apiserver Generate the kube-apiserver static Pod manifest
    • /controller-manager Generate the kube-controller-manager static pod manifest
    • /scheduler Generate the kube-scheduler static pod manifest
  • etcd Generate static Pod manifest file for local etcd
    • /local Generate the static Pod manifest file for a local,single-node local etcd instance
  • upload-config Upload the kubeadm and kubelet configuration to a Configmap
    • /kubeadm Upload the kubeadm ClusterConfiguration to a configmap
    • /kubelet Upload the kubelet component config to a configmap
  • upload-certs Upload certificates to kubeadm-certs
  • mark-control-plane Mark a node as a control-plane
  • bootstrap-token Generate bootstrap tokens used to join a node to a cluster
  • addon Install required addons for passing Conformance tests
    • /coredns Install the CoreDNS addon to a Kubernetes cluster
    • /kube-proxy Install the kube-proxy addon to a Kubernetes cluster

选项

  • -apiserver-advertise-address string
    API服务器所公布的其正在监听的IP地址。如果未设置,则使用默认网络接口
  • -apiserver-bind-port int32 默认值:6443
    API服务器绑定的端口
  • -apiserver-cert-extra-sans stringSlice
    用于API Server 服务器证书的可选附加主题备用名称(SAN)。可以是IP地址和DNS名称
  • -cert-dir string 默认值:”/etcd/kubernetes/pki”
    保存和存储证书的路径
  • -certificate-key string
    用于加密kubeadm-certs Secret 中的控制平面证书的密钥
  • -config string
    kubeadm 配置文件的路径
  • -control-plane-endpoint string
    为控制平面指定一个稳定的IP地址或DNS名称
  • -cri-socket string
    要连接的CRI套接字的路径。如果为空,则kubeadm将尝试自动监测此值;仅当安装了多个CRI或具有非标准CRI插槽时,才使用此选项
  • -dry-run
    不做任何更改,只输出将要执行的操作
  • -k,–experimental-kustomize string
    用于存储kustomize为静态pod清单所提供的补丁的路径
  • -feature-gates string
    一组用来描述各种功能特性的键值(key=value)对。选项是:IPv6DualStack=true|false (ALPHA - default=false)
  • -h,–help
    init操作的帮助命令
  • -ignore-preflight-errors stringSlice
    错误将显示为警告的检查列表;例如:IsPrivilegedUser,Swap。取值 all 时将忽略检查中的所有错误
  • –image-repository string 默认值:”k8s.gcr.io”
    选择用于拉取控制平面镜像的默认仓库
  • –kubernetes-version string
    为控制平面选择一个特定的 kubernetes 版本
  • –node-name string
    指定节点的名称
  • –pod-network-cidr string
    指明pod网络可以使用的IP地址段。如果设置了这个参数,控制平面将会为没一个节点自动分配CIDRs
  • –service-cidr string
    为服务的虚拟IP地址指定另外的IP地址段
  • –skip-certificate-key-print
    不要打印用于加密控制平面证书的密钥
  • –skip-phases stringSlice
    要跳过的阶段列表
  • –skip-token-print
    要跳过打印 kubeadm init 生成的默认引导令牌
  • –token string
    这个令牌用于建立控制平面与工作节点间的双向通信,格式为 [a-z0-9]{6}.[a-z0-9]{16}
  • –token-ttl duration
    令牌被自动删除之前的持续时间(例如 1s,2m,3h)。如果设置为0,则令牌将永不过期
  • –upload-certs
    将控制平面证书上传到kubeadm-certs Secret
  • –rootfs string
    [实验] 到 ‘真实’ 主机根文件系统的路径,从父命令继承的选项

init命令的工作流程

kubeadm init 命令通过执行下列步骤来启动一个 kubernetes 控制平面节点

  1. 在做出变更前运行一系列的预检项来验证系统状态。一些检查项目仅仅触发警告,其他的则会被视为错误并且推出kubeadm,除非问题得到解决或者用户指定了
    –ignore-preflight-error= 参数
  2. 生成一个自签名的CA证书(或者使用现有的证书,如果提供的话)来为集群中的每一个组件建立身份标识。如果用户已经通过 --cert-dir 配置的证书目录(默认为 /etc/kubernetes/pki)提供了他们自己的CA证书以及/或者密钥,那么将会跳过这个步骤,正如文档 使用自定义证书所述。如果指定了 --apiserver-cert-extra-sans 参数,APIserver的证书将会有额外的SAN条目,如果必要的话,将会被转为小写。
  3. 将 kubeconfig 文件写入 /etc/kubernetes 目录以便kubelet、controller-manager和scheduler用来连接到APIServer,它们每一个都有自己的身份标识,同时生成一个名为 admin.conf 的独立kubeconfig 文件,用于管理操作。
  4. 为APIServer、controller-manager和scheduler生成静态POD的清单文件(manifest)。假设没有提供一个外部的etcd服务的话,也会为etcd生成一份额外的静态POD清单文件。

静态POD的清单文件被写入到 /etc/kubernetes/manifest 目录;kubelet会监视这个目录以便在系统启动的时候创建pod。

一旦控制平面的POD都运行起来,kubeadm init的工作流程就继续往下执行。

  1. 对控制平面节点应用labels和taints标记以便不会在它上面运行其他的工作负载。
  2. 生成令牌以便其他节点以后可以使用这个令牌向控制平面节点注册他们自己。(可先),用户可以通过 --token 提供一个令牌,正如文档 kubeadm token所述。
  3. 为了使得节点能够遵照Bootstrap TokensLTS Bootstrap 这两份文档中描述的机制加入到集群中,kubeadm会执行所有的必要配置: -创建一份configmap提供添加集群节点所需的信息,并未该configmap设置相关的RBAC访问规则。-使得Bootstrap Tokens可以访问CSR签名API。-对新的CSR请求配置为自动签发。

在 kubeadm 中使用 init phases

Kubeadm 允许您使用 kubeadm init phases 命令分阶段创建控制平面节点。
要查看阶段和子阶段的有序列表,可以调用 kubeadm init --help。该列表将位于帮助屏幕的顶部,每个阶段旁边都有一个描述。注意,通过调用 kubeadm init, 所有阶段和子阶段都将按照此确切顺序执行。
某些阶段具有唯一的标志,因此,如果要查看可用选项的列表,请添加 --help ,例如:
sudo kubead init phase control=plane controller-manager --help
您也可以使用 --help 查看特定父阶段的子阶段列表:
sudo kubeadm init phase control-plane --help
kubeadm init 还公开了一个名为 --skip-phases 的参数,该参数可用于跳过某些阶段。参数接受阶段名称列表,并且这些名称可以从上面的有序列表中获取。
例如:

1
2
3
4
sudo kubeadm init phase control-plane all --config=configfile.yaml
sudo kubeadm init phase etcd local --config=configfile.yaml
# 您现在可以修改控制平面和 etcd 清单文件
sudo kubeadm init --skip-phases=control-plane,etcd --config=configfile.yaml

该示例将执行的操作是基于 configfile.yaml 中的配置在 /etc/kubernetes/manifest 中写入控制平面和etcd的清单文件。这允许您修改文件,然后使用 –skip-phases 跳过这些阶段。通过调用最后一个命令,您将使用自定义清单文件创造一个控制平面节点。

结合一个配置文件来使用kubeadm init

通过一份配置文件而不是使用命令行参数来配置 kubeadm init 命令是可能的,但是一些更加高级的功能只能通过配置文件设定。这份配置文件通过 –config 选项参数指定。
可以使用 kubead config print 命令打印出默认配置。
推荐使用 kubeadm config migrate 命令将旧的 v1beta1 版本的配置迁移到 v1beta2 版本。

添加 kube-proxy 参数

kubeadm配置中有关 kube-proxy 的说明请查看:-kube-proxy
使用 kubeadm 启用IPVS模式的说明请查看: -IPVS

向控制平面组件传递自定义的命令行参数

有关向控制平面组件传递命令行参数的说明请查看:控制平面命令行参数

使用自定义的镜像

默认情况下,kubeadm会从 k8s.gcr.io 仓库拉取镜像。如果请求的Kubernetes 版本是 CI label(例如 ci/latest),则使用 gcr.io/kubernetes-ci-images。
您可以通过使用带有配置文件的kubeadm来重写此操作。
允许的自定义功能有:

  • 使用其他的 imageRepository 来代替 k8s.gcr.io
  • 将 useHyperKubeImage 设置为 true,使用 HyperKube 镜像
  • 为etcd或DNS附件提供特定的 imageRepository 和 imageTag
    请注意配置文件中的配置项 kubernetesVersion 或者命令行参数 –kubernetes-version 会影响到镜像的版本。

将控制平面证书上传到集群

  • 版权声明: 本博客所有文章除特别声明外,均采用 Apache License 2.0 许可协议。转载请注明出处!
  • © 2020 ChpiTer
  • Powered by Hexo Theme Ayer

请我喝杯咖啡吧~

支付宝
微信