十二、Kubernetes_v1.14.2 kube-apiserverクラスタの配備
11559 ワード
一、ダウンロードして解凍する
二、kube-apiserverファイルの配布
三、APIサーバーの認証ファイルを作成する
四、Kubernetesの証明書と秘密鍵を生成する
五、生成された証明書と秘密鍵を配布する
六、APIサーバーで使用するtokenファイルを作成する
七、API Serverが使用するtokenファイルの配布
八、基礎ユーザー名、パスワード認証構成の作成
九、作成ベースユーザー名、パスワード認証プロファイルの配布
十、metrics-server証明書の作成(metrics-serverプラグイン使用)
十一、metrics-server証明書を生成する
十二、metrics-server証明書の配布
十三、kube-apiserverの配備
#kube-apiserverのsystemdファイルの作成
14テンプレートファイルの変数を置き換え、各ノードにsystemd unitファイルを生成する
十五、kube-apiserverのsystemdファイルを配布する
十六、kube-apiserverサービスを起動
十七、kube-apiserverサービスの検証
ステータスが
18,kube-apiserverがetcdに書き込むデータを印刷する
十九、クラスタ情報を検査する
出力:Kubernetes master is running athttps://172.27.128.200:6443
To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
出力:NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S)AGE default service/kubernetes ClusterIP 10.1.0.1 443/TCP 9 m 40 s
出力:NAME STATUS MESSAGE ERRORcontroller-manager Unhealthy Gethttp://127.0.0.1:10252/healthz: dial tcp 127.0.0.1:10252: connect: connection refused scheduler Unhealthy Get http://127.0.0.1:10251/healthz: dial tcp 127.0.0.1:10251: connect: connection refused etcd-1 Healthy {"health":"true"} etcd-2 Healthy {"health":"true"} etcd-0 Healthy {"health":"true"}
20、kube-apiserverが傍受しているポートを確認します.
#
wget https://dl.k8s.io/v1.14.2/kubernetes-server-linux-amd64.tar.gz
#
tar -zxvf kubernetes-server-linux-amd64.tar.gz -C /opt/kubernetes/package/
#
ls /opt/kubernetes/package/kubernetes/server/bin/
二、kube-apiserverファイルの配布
source /root/env.sh
for master_ip in ${MASTER_IPS[@]}
do
echo -e "\033[31m>>> ${master_ip} \033[0m"
scp /opt/kubernetes/package/kubernetes/server/bin/kube-apiserver root@${master_ip}:/opt/kubernetes/bin/
done
#
source /root/env.sh
for master_ip in ${MASTER_IPS[@]}
do
echo -e "\033[31m>>> ${master_ip} \033[0m"
ssh root@${master_ip} "ls -ld /opt/kubernetes/bin/kube-apiserver"
done
三、APIサーバーの認証ファイルを作成する
cd /opt/kubernetes/ssl
cat > kubernetes-csr.json << EOF
{
"CN": "kubernetes",
"hosts": [
"127.0.0.1",
"172.27.128.200",
"10.1.0.1",
"kubernetes",
"kubernetes.default",
"kubernetes.default.svc",
"kubernetes.default.svc.cluster",
"kubernetes.default.svc.cluster.local"
],
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "CN",
"ST": "BeiJing",
"L": "BeiJing",
"O": "k8s",
"OU": "System"
}
]
}
EOF
四、Kubernetesの証明書と秘密鍵を生成する
cfssl gencert -ca=/opt/kubernetes/ssl/ca.pem \
-ca-key=/opt/kubernetes/ssl/ca-key.pem \
-config=/opt/kubernetes/ssl/ca-config.json \
-profile=kubernetes kubernetes-csr.json | cfssljson -bare kubernetes
#
ls -ld kubernetes-key.pem kubernetes.pem
五、生成された証明書と秘密鍵を配布する
source /root/env.sh
for master_ip in ${MASTER_IPS[@]}
do
echo -e "\033[31m>>> ${master_ip} \033[0m"
scp kubernetes-key.pem kubernetes.pem root@${master_ip}:/opt/kubernetes/ssl
done
#
source /root/env.sh
for master_ip in ${MASTER_IPS[@]}
do
echo -e "\033[31m>>> ${master_ip} \033[0m"
ssh root@${master_ip} "ls -ld /opt/kubernetes/ssl/{kubernetes-key.pem,kubernetes.pem}"
done
六、APIサーバーで使用するtokenファイルを作成する
head -c 16 /dev/urandom | od -An -t x | tr -d ' '
# :416569d477d651706738c3b6b8e2023e
cat > /opt/kubernetes/ssl/bootstrap-token.csv << EOF
416569d477d651706738c3b6b8e2023e,kubelet-bootstrap,10001,"system:kubelet-bootstrap"
EOF
七、API Serverが使用するtokenファイルの配布
source /root/env.sh
for master_ip in ${MASTER_IPS[@]}
do
echo -e "\033[31m>>> ${master_ip} \033[0m"
scp /opt/kubernetes/ssl/bootstrap-token.csv root@${master_ip}:/opt/kubernetes/ssl/
done
#
source /root/env.sh
for master_ip in ${MASTER_IPS[@]}
do
echo -e "\033[31m>>> ${master_ip} \033[0m"
ssh root@${master_ip} "cat /opt/kubernetes/ssl/bootstrap-token.csv"
done
八、基礎ユーザー名、パスワード認証構成の作成
cat > /opt/kubernetes/ssl/basic-auth.csv << EOF
admin,admin,1
readonly,readonly,2
EOF
九、作成ベースユーザー名、パスワード認証プロファイルの配布
source /root/env.sh
for master_ip in ${MASTER_IPS[@]}
do
echo -e "\033[31m>>> ${master_ip} \033[0m"
scp /opt/kubernetes/ssl/basic-auth.csv root@${master_ip}:/opt/kubernetes/ssl/
done
#
source /root/env.sh
for master_ip in ${MASTER_IPS[@]}
do
echo -e "\033[31m>>> ${master_ip} \033[0m"
ssh root@${master_ip} "cat /opt/kubernetes/ssl/basic-auth.csv"
done
十、metrics-server証明書の作成(metrics-serverプラグイン使用)
cd /opt/kubernetes/ssl
# metrics-server-csr.json
cat > metrics-server-csr.json << EOF
{
"CN": "aggregator",
"hosts": [],
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "CN",
"ST": "BeiJing",
"L": "BeiJing",
"O": "k8s",
"OU": "System"
}
]
}
EOF
十一、metrics-server証明書を生成する
cfssl gencert -ca=/opt/kubernetes/ssl/ca.pem \
-ca-key=/opt/kubernetes/ssl/ca-key.pem \
-config=/opt/kubernetes/ssl/ca-config.json \
-profile=kubernetes metrics-server-csr.json | cfssljson -bare metrics-server
#
ls -ld metrics-server*.pem
十二、metrics-server証明書の配布
source /root/env.sh
for master_ip in ${MASTER_IPS[@]}
do
echo -e "\033[31m>>> ${master_ip} \033[0m"
scp metrics-server*.pem root@${master_ip}:/opt/kubernetes/ssl
done
#
source /root/env.sh
for master_ip in ${MASTER_IPS[@]}
do
echo -e "\033[31m>>> ${master_ip} \033[0m"
ssh root@${master_ip} "ls -ld /opt/kubernetes/ssl/metrics-server*.pem"
done
十三、kube-apiserverの配備
#kube-apiserverのsystemdファイルの作成
source /root/env.sh
cat > kube-apiserver.service << EOF
[Unit]
Description=Kubernetes API Server
Documentation=https://github.com/GoogleCloudPlatform/kubernetes
After=network.target
[Service]
ExecStart=/opt/kubernetes/bin/kube-apiserver \\
--enable-admission-plugins=MutatingAdmissionWebhook,ValidatingAdmissionWebhook,NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,ResourceQuota,NodeRestriction \\
--bind-address=##MASTER_IP## \\
--insecure-bind-address=127.0.0.1 \\
--authorization-mode=Node,RBAC \\
--runtime-config=api/all=true \\
--kubelet-https=true \\
--anonymous-auth=false \\
--basic-auth-file=/opt/kubernetes/ssl/basic-auth.csv \\
--enable-bootstrap-token-auth \\
--token-auth-file=/opt/kubernetes/ssl/bootstrap-token.csv \\
--service-cluster-ip-range=10.1.0.0/16 \\
--service-node-port-range=20000-40000 \\
--tls-cert-file=/opt/kubernetes/ssl/kubernetes.pem \\
--tls-private-key-file=/opt/kubernetes/ssl/kubernetes-key.pem \\
--client-ca-file=/opt/kubernetes/ssl/ca.pem \\
--service-account-key-file=/opt/kubernetes/ssl/ca-key.pem \\
--etcd-cafile=/opt/kubernetes/ssl/ca.pem \\
--etcd-certfile=/opt/kubernetes/ssl/kubernetes.pem \\
--etcd-keyfile=/opt/kubernetes/ssl/kubernetes-key.pem \\
--etcd-servers=${ETCD_ENDPOINTS} \\
--requestheader-client-ca-file=/opt/kubernetes/ssl/ca.pem \\
--requestheader-extra-headers-prefix=X-Remote-Extra- \\
--requestheader-group-headers=X-Remote-Group \\
--requestheader-username-headers=X-Remote-User \\
--proxy-client-cert-file=/opt/kubernetes/ssl/metrics-server.pem \\
--proxy-client-key-file=/opt/kubernetes/ssl/metrics-server-key.pem \\
--enable-swagger-ui=true \\
--allow-privileged=true \\
--audit-log-maxage=30 \\
--audit-log-maxbackup=3 \\
--audit-log-maxsize=100 \\
--audit-log-path=/opt/kubernetes/log/api-audit.log \\
--event-ttl=1h \\
--v=2 \\
--logtostderr=false \\
--log-dir=/opt/kubernetes/log
Restart=on-failure
RestartSec=5
Type=notify
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
EOF
--etcd-*
:etcdにアクセスする証明書とetcdサーバアドレス;--enable-bootstrap-token-auth
:kubelet bootstrapのtoken認証を有効にします.--proxy-client-*
:apiserverはmetrics-serverが使用する証明書にアクセスします.--bind-address
:httpsが傍受するIPは、127.0.0.1
ではありません.そうしないと、外部からセキュリティポート6443にアクセスできません.--authorization-mode=Node,RBAC
、--anonymous-auth=false
:NodeとRBAC授権モードをオンにし、未授権の要求を拒否する.--runtime-config=api/all=true
:autoscaling/v 2 alpha 1などのすべてのバージョンのAPIsを有効にします.--service-cluster-ip-range
:Service Cluster IPアドレスセグメントを指定します.--service-node-port-range
:NodePortのポート範囲を指定します.14テンプレートファイルの変数を置き換え、各ノードにsystemd unitファイルを生成する
source /root/env.sh
for (( i=0; i < 3; i++ ))
do
sed -e "s/##MASTER_IP##/${MASTER_IPS[i]}/" kube-apiserver.service > kube-apiserver-${MASTER_IPS[i]}.service
done
#
ls kube-apiserver*.service
十五、kube-apiserverのsystemdファイルを配布する
source /root/env.sh
for master_ip in ${MASTER_IPS[@]}
do
echo -e "\033[31m>>> ${master_ip} \033[0m"
scp kube-apiserver-${master_ip}.service root@${master_ip}:/usr/lib/systemd/system/kube-apiserver.service
done
#
source /root/env.sh
for master_ip in ${MASTER_IPS[@]}
do
echo -e "\033[31m>>> ${master_ip} \033[0m"
ssh root@${master_ip} "ls -ld /usr/lib/systemd/system/kube-apiserver.service"
done
十六、kube-apiserverサービスを起動
source /root/env.sh
for master_ip in ${MASTER_IPS[@]}
do
echo -e "\033[31m>>> ${master_ip} \033[0m"
ssh root@${master_ip} "systemctl daemon-reload && systemctl restart kube-apiserver && systemctl enable kube-apiserver"
done
十七、kube-apiserverサービスの検証
source /root/env.sh
for master_ip in ${MASTER_IPS[@]}
do
echo -e "\033[31m>>> ${master_ip} \033[0m"
ssh root@${master_ip} "systemctl status kube-apiserver | grep Active"
done
ステータスが
active (running)
であることを確認します.そうしないと、ログを表示し、原因を確認します.journalctl -u kube-apiserver
18,kube-apiserverがetcdに書き込むデータを印刷する
ETCDCTL_API=3 etcdctl \
--endpoints=${ETCD_ENDPOINTS} \
--cacert=/opt/kubernetes/ssl/ca.pem \
--cert=/opt/kubernetes/ssl/etcd.pem \
--key=/opt/kubernetes/ssl/etcd-key.pem \
get /registry/ --prefix --keys-only
十九、クラスタ情報を検査する
kubectl cluster-info
出力:Kubernetes master is running athttps://172.27.128.200:6443
To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
kubectl get all --all-namespaces
出力:NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S)AGE default service/kubernetes ClusterIP 10.1.0.1 443/TCP 9 m 40 s
kubectl get componentstatuses
出力:NAME STATUS MESSAGE ERRORcontroller-manager Unhealthy Gethttp://127.0.0.1:10252/healthz: dial tcp 127.0.0.1:10252: connect: connection refused scheduler Unhealthy Get http://127.0.0.1:10251/healthz: dial tcp 127.0.0.1:10251: connect: connection refused etcd-1 Healthy {"health":"true"} etcd-2 Healthy {"health":"true"} etcd-0 Healthy {"health":"true"}
20、kube-apiserverが傍受しているポートを確認します.
source /root/env.sh
for master_ip in ${MASTER_IPS[@]}
do
echo -e "\033[31m>>> ${master_ip} \033[0m"
ssh root@${master_ip} "netstat -lnpt | grep kube"
done