kubeadmインストール構成とthe-hard-wayインストール構成の違い

kubeadmを使ってk8sをインストールした場合と、kubernetes-the-hard-wayの手順に沿ってインストールした場合の構成の違いについて調べてみた。

如果使用kubeadm

简单地解释kubeadm是指在Linux服务器上运行docker引擎的情况下,通过执行”kubeadm init”命令来配置主节点。然后,利用此命令的执行结果,可以通过执行”kubeadm join”命令来添加节点。

kubeadm コマンドの働きによって、k8sクラスタの認証局の構築、APIサーバー(kube-apiserver)、スケジューラー(kube-scheduler)、コントローラーマネージャー(kube-controller-manager)、データベース(etcd)が、自動的に構成される。

マスターノードの設定

kubeletがsystemdによって起動されることで、k8sのコンポーネントも起動する。
systemdの設定は、/etc/systemd/system/kubelet.service.d のディレクトリに置かれ、kubeletが起動する。
kubeletは、/etc/kubernetes/manifestsのマニフェストを使用して、ポッド(コンテナ)として、APIサーバー(kube-apiserver)、スケジューラー(kube-scheduler)、コントローラーマネージャー(kube-controller-manager)、データベース(etcd)を起動する。

設定文件存在的目錄

root@master:/etc/kubernetes# tree .
.
├── admin.conf
├── controller-manager.conf
├── kubelet.conf
├── manifests
│   ├── etcd.yaml
│   ├── kube-apiserver.yaml
│   ├── kube-controller-manager.yaml
│   └── kube-scheduler.yaml
├── pki
│   ├── apiserver.crt
│   ├── apiserver-etcd-client.crt
│   ├── apiserver-etcd-client.key
│   ├── apiserver.key
│   ├── apiserver-kubelet-client.crt
│   ├── apiserver-kubelet-client.key
│   ├── ca.crt
│   ├── ca.key
│   ├── etcd
│   │   ├── ca.crt
│   │   ├── ca.key
│   │   ├── healthcheck-client.crt
│   │   ├── healthcheck-client.key
│   │   ├── peer.crt
│   │   ├── peer.key
│   │   ├── server.crt
│   │   └── server.key
│   ├── front-proxy-ca.crt
│   ├── front-proxy-ca.key
│   ├── front-proxy-client.crt
│   ├── front-proxy-client.key
│   ├── sa.key
│   └── sa.pub
└── scheduler.conf

工作节点的设置

在节点上,kubelet从systemd启动。kube-proxy和flannel作为守护进程启动,通过加入集群并接收主节点的指令来启动。

root@node1:/etc/kubernetes# tree
.
├── bootstrap-kubelet.conf
├── kubelet.conf
├── manifests
└── pki
    └── ca.crt

如果在systemd的配置中,kubelet没有启用,那么它将无法加入集群的成员。

如果按照the-hard-way的步骤进行安装。

通过手动操作,the-hard-way 方法可以在不使用 kubeadm 命令的情况下完成所有设置。按照 the-hard-way 的步骤,kube-apiserve、kube-controller-manager、kube-scheduler、etcd 和 etcdctl 将被放置在 /usr/local/bin 目录下作为可执行文件,并在 systemd 的控制下启动。

下面是一个启动kube-apiserver的守护进程的systemd配置文件示例。

[Unit]
Description=Kubernetes API Server
Documentation=https://github.com/kubernetes/kubernetes

[Service]
ExecStart=/usr/local/bin/kube-apiserver \\
  --advertise-address=${INTERNAL_IP} \\
  --allow-privileged=true \\
  --apiserver-count=3 \\
  --audit-log-maxage=30 \\
  --audit-log-maxbackup=3 \\
  --audit-log-maxsize=100 \\
  --audit-log-path=/var/log/audit.log \\
  --authorization-mode=Node,RBAC \\
  --bind-address=0.0.0.0 \\
  --client-ca-file=/var/lib/kubernetes/ca.pem \\
  --enable-admission-plugins=Initializers,NamespaceLifecycle,NodeRestriction,LimitRanger,ServiceAccount,DefaultStorageClass,ResourceQuota \\
  --enable-swagger-ui=true \\
  --etcd-cafile=/var/lib/kubernetes/ca.pem \\
  --etcd-certfile=/var/lib/kubernetes/kubernetes.pem \\
  --etcd-keyfile=/var/lib/kubernetes/kubernetes-key.pem \\
  --etcd-servers=https://10.240.0.10:2379,https://10.240.0.11:2379,https://10.240.0.12:2379 \\
  --event-ttl=1h \\
  --experimental-encryption-provider-config=/var/lib/kubernetes/encryption-config.yaml \\
  --kubelet-certificate-authority=/var/lib/kubernetes/ca.pem \\
  --kubelet-client-certificate=/var/lib/kubernetes/kubernetes.pem \\
  --kubelet-client-key=/var/lib/kubernetes/kubernetes-key.pem \\
  --kubelet-https=true \\
  --runtime-config=api/all \\
  --service-account-key-file=/var/lib/kubernetes/service-account.pem \\
  --service-cluster-ip-range=10.32.0.0/24 \\
  --service-node-port-range=30000-32767 \\
  --tls-cert-file=/var/lib/kubernetes/kubernetes.pem \\
  --tls-private-key-file=/var/lib/kubernetes/kubernetes-key.pem \\
  --v=2
Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target

在the-hard-way中,将主控节点称为“控制器”而将节点称为“工作者”,我认为这一点非常有趣。

etcd 数据备份

如果按照the-hard-way中的步骤安装,然后在Linux控制台上可以使用etcdctl命令,就可以按以下步骤获取备份(快照)。

root@controller-0:~# ETCDCTL_API=3 etcdctl --endpoints=https://172.16.40.10:2379   --cacert=/etc/etcd/ca.pem   --cert=/etc/etcd/kubernetes.pem   --key=/etc/etcd/kubernetes-key.pem snapshot save snapshotdb
Snapshot saved at snapshotdb
root@controller-0:~# ETCDCTL_API=3 etcdctl --endpoints=https://172.16.40.10:2379   --cacert=/etc/etcd/ca.pem   --cert=/etc/etcd/kubernetes.pem   --key=/etc/etcd/kubernetes-key.pem --write-out=table snapshot status snapshotdb
+----------+----------+------------+------------+
|   HASH   | REVISION | TOTAL KEYS | TOTAL SIZE |
+----------+----------+------------+------------+
| 72358df4 |        0 |          5 |      16 kB |
+----------+----------+------------+------------+

整理

使用kubeadm时,除了kubelet之外的主要组件将被配置为pod。而在”the-hard-way”的步骤中,除了kubelet之外的组件也会在主节点上以守护进程的方式运行。

广告
将在 10 秒后关闭
bannerAds