7. コントロールプレーンの構築
下記をインストールし、コントロールプレーンを起動します。
事前準備
systemdユニットファイルを作成します。
cat << EOF > units/kube-apiserver.service
[Unit]
Description=Kubernetes API Server
Documentation=https://github.com/kubernetes/kubernetes
[Service]
ExecStart=/usr/local/bin/kube-apiserver \
--allow-privileged=true \
--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.crt \
--enable-admission-plugins=NamespaceLifecycle,NodeRestriction,LimitRanger,ServiceAccount,DefaultStorageClass,ResourceQuota \
--etcd-servers=http://127.0.0.1:2379 \
--event-ttl=1h \
--encryption-provider-config=/var/lib/kubernetes/encryption-config.yaml \
--kubelet-certificate-authority=/var/lib/kubernetes/ca.crt \
--kubelet-client-certificate=/var/lib/kubernetes/kube-api-server.crt \
--kubelet-client-key=/var/lib/kubernetes/kube-api-server.key \
--runtime-config='api/all=true' \
--service-account-key-file=/var/lib/kubernetes/service-accounts.crt \
--service-account-signing-key-file=/var/lib/kubernetes/service-accounts.key \
--service-account-issuer=https://server.kubernetes.local:6443 \
--service-node-port-range=30000-32767 \
--tls-cert-file=/var/lib/kubernetes/kube-api-server.crt \
--tls-private-key-file=/var/lib/kubernetes/kube-api-server.key \
--v=2
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
EOF
cat << EOF > units/kube-controller-manager.service
[Unit]
Description=Kubernetes Controller Manager
Documentation=https://github.com/kubernetes/kubernetes
[Service]
ExecStart=/usr/local/bin/kube-controller-manager \
--bind-address=0.0.0.0 \
--cluster-cidr=10.200.0.0/16 \
--cluster-name=kubernetes \
--cluster-signing-cert-file=/var/lib/kubernetes/ca.crt \
--cluster-signing-key-file=/var/lib/kubernetes/ca.key \
--kubeconfig=/var/lib/kubernetes/kube-controller-manager.kubeconfig \
--root-ca-file=/var/lib/kubernetes/ca.crt \
--service-account-private-key-file=/var/lib/kubernetes/service-accounts.key \
--service-cluster-ip-range=10.32.0.0/24 \
--use-service-account-credentials=true \
--v=2
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
EOF
cat << EOF > units/kube-scheduler.service
[Unit]
Description=Kubernetes Scheduler
Documentation=https://github.com/kubernetes/kubernetes
[Service]
ExecStart=/usr/local/bin/kube-scheduler \
--config=/etc/kubernetes/config/kube-scheduler.yaml \
--v=2
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
EOF
設定ファイルを作成します。
mkdir configs
cat << EOF > configs/kube-scheduler.yaml
apiVersion: kubescheduler.config.k8s.io/v1
kind: KubeSchedulerConfiguration
clientConnection:
kubeconfig: "/var/lib/kubernetes/kube-scheduler.kubeconfig"
leaderElection:
leaderElect: true
EOF
cat << EOF > configs/kube-apiserver-to-kubelet.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
annotations:
rbac.authorization.kubernetes.io/autoupdate: "true"
labels:
kubernetes.io/bootstrapping: rbac-defaults
name: system:kube-apiserver-to-kubelet
rules:
- apiGroups:
- ""
resources:
- nodes/proxy
- nodes/stats
- nodes/log
- nodes/spec
- nodes/metrics
verbs:
- "*"
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: system:kube-apiserver
namespace: ""
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: system:kube-apiserver-to-kubelet
subjects:
- apiGroup: rbac.authorization.k8s.io
kind: User
name: kubernetes
EOF
バイナリファイルおよびsystemdユニットファイルをkube-c01にコピーします。
scp \
downloads/controller/kube-apiserver \
downloads/controller/kube-controller-manager \
downloads/controller/kube-scheduler \
downloads/client/kubectl \
units/kube-apiserver.service \
units/kube-controller-manager.service \
units/kube-scheduler.service \
configs/kube-scheduler.yaml \
configs/kube-apiserver-to-kubelet.yaml \
nob@kube-c01:~/
コントロールプレーンの設定
バイナリのインストール
ssh nob@kube-c01 "sudo mv kube-apiserver kube-controller-manager kube-scheduler kubectl /usr/local/bin/"
kube-apiserverの設定
証明書を配置します。
ssh nob@kube-c01 "sudo mkdir -p /var/lib/kubernetes"
ssh nob@kube-c01 "sudo 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/"
systemdユニットファイルを作成します。
ssh nob@kube-c01 "sudo mv kube-apiserver.service /etc/systemd/system/"
kube-controller-managerの設定
kubeconfigを配置します。
ssh nob@kube-c01 "sudo mv kube-controller-manager.kubeconfig /var/lib/kubernetes/"
systemdユニットファイルを作成します。
ssh nob@kube-c01 "sudo mv kube-controller-manager.service /etc/systemd/system/"
kube-schedulerの設定
kubeconfigを配置します。
ssh nob@kube-c01 "sudo mv kube-scheduler.kubeconfig /var/lib/kubernetes/"
設定ファイルを配置します。
ssh nob@kube-c01 "sudo mkdir -p /etc/kubernetes/config"
ssh nob@kube-c01 "sudo mv kube-scheduler.yaml /etc/kubernetes/config/"
systemdユニットファイルを作成します。
ssh nob@kube-c01 "sudo mv kube-scheduler.service /etc/systemd/system/"
コントロールプレーンの起動
各種サービスを起動します。それぞれのサービスが起動しているかを確認するにはsudo systemctl status xxxコマンドを実行してください。ログを表示する場合はjournalctl -u xxxコマンドを実行してください。
ssh nob@kube-c01 "sudo systemctl daemon-reload"
ssh nob@kube-c01 "sudo systemctl enable kube-apiserver kube-controller-manager kube-scheduler"
ssh nob@kube-c01 "sudo systemctl start kube-apiserver kube-controller-manager kube-scheduler"
コントロールプレーンが正常に起動していることを確認します。
ssh nob@kube-c01 kubectl cluster-info --kubeconfig admin.kubeconfig
$ ssh nob@kube-c01 kubectl cluster-info --kubeconfig admin.kubeconfig
Kubernetes control plane is running at https://127.0.0.1:6443
To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
kubelet認証のためのRBACの設定
Kubernetes APIサーバが各ワーカーノード上のKubelet APIにアクセスできるようにRBAC権限を設定します。
ssh nob@kube-c01 "kubectl apply -f kube-apiserver-to-kubelet.yaml --kubeconfig admin.kubeconfig"
動作確認
コントロールプレーンが正常に起動、動作していることを確認します。
curl --cacert ca.crt https://kube-c01.kubernetes.local:6443/version
$ curl --cacert ca.crt https://kube-c01.kubernetes.local:6443/version
{
"major": "1",
"minor": "32",
"gitVersion": "v1.32.3",
"gitCommit": "32cc146f75aad04beaaa245a7157eb35063a9f99",
"gitTreeState": "clean",
"buildDate": "2025-03-11T19:52:21Z",
"goVersion": "go1.23.6",
"compiler": "gc",
"platform": "linux/amd64"
}
次: ワーカーノードの構築