180 lines
5.0 KiB
Markdown
180 lines
5.0 KiB
Markdown
|
# Kubernetesコントロールプレーンのブートストラップ
|
|||
|
|
|||
|
このラボでは、Kubernetesコントロールプレーンをブートストラップします。以下のコンポーネントがコントローラーマシンにインストールされます:Kubernetes API Server、Scheduler、およびController Manager。
|
|||
|
|
|||
|
## 前提条件
|
|||
|
|
|||
|
Kubernetesバイナリとsystemdユニットファイルを`server`インスタンスにコピーします:
|
|||
|
|
|||
|
```bash
|
|||
|
scp \
|
|||
|
downloads/kube-apiserver \
|
|||
|
downloads/kube-controller-manager \
|
|||
|
downloads/kube-scheduler \
|
|||
|
downloads/kubectl \
|
|||
|
units/kube-apiserver.service \
|
|||
|
units/kube-controller-manager.service \
|
|||
|
units/kube-scheduler.service \
|
|||
|
configs/kube-scheduler.yaml \
|
|||
|
configs/kube-apiserver-to-kubelet.yaml \
|
|||
|
root@server:~/
|
|||
|
```
|
|||
|
|
|||
|
このラボのコマンドはすべてコントローラーインスタンス`server`上で実行する必要があります。`ssh`コマンドを使用してコントローラーインスタンスにログインします。例:
|
|||
|
|
|||
|
```bash
|
|||
|
ssh root@server
|
|||
|
```
|
|||
|
|
|||
|
## Kubernetesコントロールプレーンのプロビジョニング
|
|||
|
|
|||
|
Kubernetes構成ディレクトリを作成します:
|
|||
|
|
|||
|
```bash
|
|||
|
mkdir -p /etc/kubernetes/config
|
|||
|
```
|
|||
|
|
|||
|
### Kubernetesコントローラーバイナリのインストール
|
|||
|
|
|||
|
Kubernetesバイナリをインストールします:
|
|||
|
|
|||
|
```bash
|
|||
|
{
|
|||
|
chmod +x kube-apiserver \
|
|||
|
kube-controller-manager \
|
|||
|
kube-scheduler kubectl
|
|||
|
|
|||
|
mv kube-apiserver \
|
|||
|
kube-controller-manager \
|
|||
|
kube-scheduler kubectl \
|
|||
|
/usr/local/bin/
|
|||
|
}
|
|||
|
```
|
|||
|
|
|||
|
### Kubernetes API Serverの構成
|
|||
|
|
|||
|
```bash
|
|||
|
{
|
|||
|
mkdir -p /var/lib/kubernetes/
|
|||
|
|
|||
|
mv ca.crt ca.key \
|
|||
|
kube-api-server.key kube-api-server.crt \
|
|||
|
service-accounts.key service-accounts.crt \
|
|||
|
encryption-config.yaml \
|
|||
|
/var/lib/kubernetes/
|
|||
|
}
|
|||
|
```
|
|||
|
|
|||
|
`kube-apiserver.service` systemdユニットファイルを作成します:
|
|||
|
|
|||
|
```bash
|
|||
|
mv kube-apiserver.service \
|
|||
|
/etc/systemd/system/kube-apiserver.service
|
|||
|
```
|
|||
|
|
|||
|
### Kubernetes Controller Managerの構成
|
|||
|
|
|||
|
`kube-controller-manager` kubeconfigを適切な場所に移動します:
|
|||
|
|
|||
|
```bash
|
|||
|
mv kube-controller-manager.kubeconfig /var/lib/kubernetes/
|
|||
|
```
|
|||
|
|
|||
|
`kube-controller-manager.service` systemdユニットファイルを作成します:
|
|||
|
|
|||
|
```bash
|
|||
|
mv kube-controller-manager.service /etc/systemd/system/
|
|||
|
```
|
|||
|
|
|||
|
### Kubernetes Schedulerの構成
|
|||
|
|
|||
|
`kube-scheduler` kubeconfigを適切な場所に移動します:
|
|||
|
|
|||
|
```bash
|
|||
|
mv kube-scheduler.kubeconfig /var/lib/kubernetes/
|
|||
|
```
|
|||
|
|
|||
|
`kube-scheduler.yaml`構成ファイルを作成します:
|
|||
|
|
|||
|
```bash
|
|||
|
mv kube-scheduler.yaml /etc/kubernetes/config/
|
|||
|
```
|
|||
|
|
|||
|
`kube-scheduler.service` systemdユニットファイルを作成します:
|
|||
|
|
|||
|
```bash
|
|||
|
mv kube-scheduler.service /etc/systemd/system/
|
|||
|
```
|
|||
|
|
|||
|
### コントローラーサービスの起動
|
|||
|
|
|||
|
```bash
|
|||
|
{
|
|||
|
systemctl daemon-reload
|
|||
|
|
|||
|
systemctl enable kube-apiserver \
|
|||
|
kube-controller-manager kube-scheduler
|
|||
|
|
|||
|
systemctl start kube-apiserver \
|
|||
|
kube-controller-manager kube-scheduler
|
|||
|
}
|
|||
|
```
|
|||
|
|
|||
|
> Kubernetes API Serverの完全な初期化まで最大10秒かかる場合があります。
|
|||
|
|
|||
|
### 検証
|
|||
|
|
|||
|
```bash
|
|||
|
kubectl cluster-info \
|
|||
|
--kubeconfig admin.kubeconfig
|
|||
|
```
|
|||
|
|
|||
|
```text
|
|||
|
Kubernetesコントロールプレーンはhttps://127.0.0.1:6443で実行中です
|
|||
|
```
|
|||
|
|
|||
|
## Kubelet認可のためのRBAC
|
|||
|
|
|||
|
このセクションでは、Kubernetes API Serverが各ワーカーノードのKubelet APIにアクセスできるようにRBAC権限を構成します。Kubelet APIへのアクセスは、メトリクスの取得、ログの取得、およびポッドでのコマンドの実行に必要です。
|
|||
|
|
|||
|
> このチュートリアルでは、Kubeletの`--authorization-mode`フラグを`Webhook`に設定します。Webhookモードでは、[SubjectAccessReview](https://kubernetes.io/docs/admin/authorization/#checking-api-access) APIを使用して認可を決定します。
|
|||
|
|
|||
|
このセクションのコマンドは、クラスタ全体に影響を与えるため、コントローラーノード上で実行する必要があります。
|
|||
|
|
|||
|
```bash
|
|||
|
ssh root@server
|
|||
|
```
|
|||
|
|
|||
|
`system:kube-apiserver-to-kubelet` [ClusterRole](https://kubernetes.io/docs/admin/authorization/rbac/#role-and-clusterrole)を作成し、Kubelet APIへのアクセス権限とポッドの管理に関連するタスクの実行権限を付与します:
|
|||
|
|
|||
|
```bash
|
|||
|
kubectl apply -f kube-apiserver-to-kubelet.yaml \
|
|||
|
--kubeconfig admin.kubeconfig
|
|||
|
```
|
|||
|
|
|||
|
### 検証
|
|||
|
|
|||
|
この時点で、Kubernetesコントロールプレーンが稼働しています。`jumpbox`マシンから以下のコマンドを実行して検証します:
|
|||
|
|
|||
|
Kubernetesバージョン情報のHTTPリクエストを送信します:
|
|||
|
|
|||
|
```bash
|
|||
|
curl -k --cacert ca.crt https://server.kubernetes.local:6443/version
|
|||
|
```
|
|||
|
|
|||
|
```text
|
|||
|
{
|
|||
|
"major": "1",
|
|||
|
"minor": "28",
|
|||
|
"gitVersion": "v1.28.3",
|
|||
|
"gitCommit": "a8a1abc25cad87333840cd7d54be2efaf31a3177",
|
|||
|
"gitTreeState": "clean",
|
|||
|
"buildDate": "2023-10-18T11:33:18Z",
|
|||
|
"goVersion": "go1.20.10",
|
|||
|
"compiler": "gc",
|
|||
|
"platform": "linux/arm64"
|
|||
|
}
|
|||
|
```
|
|||
|
|
|||
|
次: [Kubernetesワーカーノードのブートストラップ](09-bootstrapping-kubernetes-workers.md)
|