K 8 S入門シリーズのクラスタバイナリ配置-->node編(二)
14471 ワード
Nodeノードコンポーネント(v 1.17) docker https://download.docker.com/ kubelet kube-proxy
kubernetes-server-linux-amd64.tar.gz(関連するここではバイナリファイルが見つかります!)
1.システム初期化
1.1システム環境
1.2各ノードの対応するhostnameを変更し、それぞれ/etc/hostsに書き込む
1.3依存パッケージと共通ツールのインストール
1.4すべてのノードがfirewalld,selinuxおよびswapを閉じる
1.5すべてのノードの時間同期の設定
1.6カーネルパラメータを調整し、k 8 sの必須パラメータ!
1.6 kube-proxy開始ipvsの前置条件
1.7 nodeごとにディレクトリを作成する以上の手順を完了したら、機械を再起動して を検査したほうがいいです.
2.インストールdockerの配備 dockerは、コンテナの稼働環境であり、ライフサイクルを管理します.kubeletはContainer Runtime Interface(CRI)を介してdockerと対話する flanneld起動時にネットワーク構成を/run/flannel/dockerファイルに書き込み、dockerd起動前にファイルの環境変数DOCKER_を読み込むNETWORK_OPTIONS、docker 0ブリッジセグメントを設定します.
2.1 yumインストールdocker現在、Red Hatはdocker-ceのインストールをブロックしているため、コマンドyum install docker-ceを実行しようとすると、実行に失敗します.
2.2 dockerプロファイルの変更
2.3起動を設定し、認証dockerサービスを起動する
3.クbeletコンポーネントの配備 kubletは各nodeノード上で実行され、kube-apiserverから送信された要求を受信し、Podコンテナを管理し、exec、run、logsなどのインタラクティブなコマンドを実行する. kublet起動時に自動的にkube-apiserverにノード情報を登録し、内蔵cadvisorはノードのリソース使用状況を統計し、監視する. セキュリティを確保するため、本書ではhttpsリクエストを受信するセキュリティポートのみを開き、リクエストを認証および承認し、不正アクセスps:kubeletを拒否するメカニズムでは、手動で証明書を生成する必要はありません.
3.1バイナリクbeletファイルのダウンロード
3.2マスターノードでのロールバインドの作成 kubelet起動時にkube-apiserverにTLS bootstrappingリクエストを送信するには、bootstrap tokenファイルのkubelet-bootstrapユーザーにsystem:node-bootstrapper clusterロール(role)を付与してからkubeletが認証リクエスト(certificate signing requests): を作成する権限を持つ必要があります.
--user=kubelet-bootstrapは、kube-apiserverの配備時にbootstrap-tokenを作成する.csvファイルで指定するユーザはbootstrapに書き込む必要がある.kubeconfigファイル
3.3マスターノードに参加するnodeのkubelet-bootstrapを作成する.kubeconfigファイル
関連ファイルの転送
3.4 nodeノードに対応するkubeletのsystemd unitファイルを作成する注意パラメータの置換「##NODE_IP##」置換対応するnodeIP「##NODE_NAME#」置換対応するnodeのhostname --authorization-mode:kubelet認証モード --cert-dir:TLS証明書が存在するディレクトリ --eviction-max-pod-grace-period:pod終了最大猶予時間 --pod-infra-container-image:podごとのnetwork/ipc namespaceコンテナで使用されるミラーアドレス! --hostname-override:nodeのクラスタ内のホスト名を設定し、デフォルトではホストhostnameを使用します.このパラメータが設定されている場合、kube-proxyサービスもこのパラメータ を設定する必要があります.
3.6起動を設定する.クbeletのチェックサービスを開始します
3.7クbeletのTLS証明書リクエストをマスターで承認する kubeletは、kube-apiserverに証明書署名要求を送信するために初めて起動し、kubernetesシステムによって許可されてから、nodeをクラスタに追加する必要があります.
手動approve csrリクエスト
自動approve csrリクエスト!自動approve client、renew client、renew server証明書の3つのClusterRoleBindingを作成します: auto-approve-csrs-for-group:自動approve nodeの最初のCSR;注意最初のCSRの場合、要求されたGroupはsystem:bootstrappersである. node-client-cert-renewal:自動approve node後続期限切れのclient証明書、自動生成証明書Groupはsystem:nodes; node-server-cert-renewal:自動approve node後続期限切れのserver証明書、自動生成証明書Groupはsystem:nodes;
有効な構成:
4.kube-proxyコンポーネントの配備 kube-proxyはすべてのnodeノードで実行され、apiserverにおけるserviceとEndpointの変化を傍受し、サービス負荷の等化のためのルーティングルールを作成します. kube-proxyはipvsモードを使用します.(ipvs構成は環境構成に設定されています!)
4.1 kube-proxyバイナリファイルのダウンロード
4.2 masterノードでkube-proxy証明書を作成する
masterノードに証明書リクエストファイルを作成するには CN:証明書のUserをsystem:kube-proxyと指定する. この証明書はkube-proxyによってclient証明書としてのみ使用されるため、hostsフィールドは空です.
masterノードで証明書と秘密鍵を生成
4.3マスターノードにkube-proxyを作成する.kubeconfigファイル--embed-certs=true:ca.pemとadmin.pem証明書の内容は生成されたkubectl-proxyに埋め込まれる.kubeconfigファイル(追加しない場合、証明書ファイルのパスが書き込まれます).
関連ファイルの転送
4.5 nodeノードに対応するkube-proxyのkube-proxyプロファイルを作成する all flags other than --config, --write-config-to, and --cleanup are deprecated. Please begin using a config file ASAP以降、すべてのコンポーネントがこの方向に向かっていると予測!! 注意パラメータの置き換え"##NODE_IP###"対応nodeのnodeIP"##NODE_NAME##"対応nodeのhostname を置き換える.
4.6 nodeノードでkube-proxy得systemd unitファイルを作成する
4.7起動を設定し、kube-proxyサービスを起動して確認する
4.8 nodeノード-->ipvsルーティングルールの表示
Nodeノード基本コンポーネントの導入完了
kubernetes-server-linux-amd64.tar.gz(関連するここではバイナリファイルが見つかります!)
1.システム初期化
1.1システム環境
[root@localhost ~]# cat /etc/redhat-release
CentOS Linux release 8.0.1905 (Core)
1.2各ノードの対応するhostnameを変更し、それぞれ/etc/hostsに書き込む
hostnamectl set-hostname k8s-node01
# hosts--> >> !
cat>> /etc/hosts <
1.3依存パッケージと共通ツールのインストール
yum install wget vim yum-utils net-tools tar chrony curl jq ipvsadm ipset conntrack iptables sysstat libseccomp -y
1.4すべてのノードがfirewalld,selinuxおよびswapを閉じる
#
systemctl disable --now firewalld
iptables -F && iptables -X && iptables -F -t nat && iptables -X -t nat
iptables -P FORWARD ACCEP
# selinux --->selinux=disabled !
setenforce 0 && sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
# swap ---> swap , !
swapoff -a && sed -i '/ swap / s/^\(.*\)$/# \1/g' /etc/fstab
1.5すべてのノードの時間同期の設定
timedatectl set-timezone Asia/Shanghai
timedatectl set-local-rtc 0
systemctl enable chronyd && systemctl restart chronyd
1.6カーネルパラメータを調整し、k 8 sの必須パラメータ!
#
modprobe br_netfilter
#
cat> /etc/sysctl.d/kubernetes.conf <
1.6 kube-proxy開始ipvsの前置条件
#
cat> /etc/sysconfig/modules/ipvs.modules <
1.7 nodeごとにディレクトリを作成する
#
mkdir -p /opt/k8s/{bin,cert}
mkdir -p /opt/lib/{kubelet,kube-proxy}
# node :
sh -c "echo 'PATH=/opt/k8s/bin:$PATH:$HOME/bin:$JAVA_HOME/bin' >> /etc/profile.d/k8s.sh"
#
source /etc/profile.d/k8s.sh
2.インストールdockerの配備
2.1 yumインストールdocker
# docker
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# containerd.io ( el7 ...)
yum install https://download.docker.com/linux/centos/7/x86_64/stable/Packages/containerd.io-1.2.6-3.3.el7.x86_64.rpm
# yum docker-ce 19.03
yum install docker-ce
2.2 dockerプロファイルの変更
2.3起動を設定し、認証dockerサービスを起動する
systemctl enable docker && systemctl daemon-reload && systemctl restart docker && systemctl status docker
3.クbeletコンポーネントの配備
3.1バイナリクbeletファイルのダウンロード
kubernetes-server-linux-amd64.tar.gz # , ! kubectl !
# , kube-proxy !
[root@k8s-master01 ~]# scp /root/kubernetes/server/bin/{kubelet,kube-proxy} root@k8s-node01:/opt/k8s/bin/
3.2マスターノードでのロールバインドの作成
[root@k8s-master01 ~]# kubectl create clusterrolebinding kubelet-bootstrap \
--clusterrole=system:node-bootstrapper \
--user=kubelet-bootstrap
--user=kubelet-bootstrapは、kube-apiserverの配備時にbootstrap-tokenを作成する.csvファイルで指定するユーザはbootstrapに書き込む必要がある.kubeconfigファイル
3.3マスターノードに参加するnodeのkubelet-bootstrapを作成する.kubeconfigファイル
#
[root@k8s-master01 ~]# kubectl config set-cluster kubernetes \
--certificate-authority=/opt/k8s/cert/ca.pem \
--embed-certs=true \
--server=https://192.168.2.210:8443 \
--kubeconfig=/opt/k8s/kubelet-bootstrap.kubeconfig
#
### tocker bootstrap-token.csv token
[root@k8s-master01 ~]# kubectl config set-credentials kubelet-bootstrap \
--token=23f6d5b6ddb2779c048ef13197d4aa2b \
--kubeconfig=/opt/k8s/kubelet-bootstrap.kubeconfig
#
[root@k8s-master01 ~]# kubectl config set-context default \
--cluster=kubernetes \
--user=kubelet-bootstrap \
--kubeconfig=/opt/k8s/kubelet-bootstrap.kubeconfig
#
[root@k8s-master01 ~]# kubectl config use-context default \
--kubeconfig=/opt/k8s/kubelet-bootstrap.kubeconfig
関連ファイルの転送
# ca node
scp /opt/k8s/cert/ca*.pem root@k8s-node01:/opt/k8s/cert/
# kubelet-bootstrap.kubeconfig node ( !)
scp /opt/k8s/kubelet-bootstrap.kubeconfig root@k8s-node01:/opt/k8s/
3.4 nodeノードに対応するkubeletのsystemd unitファイルを作成する
[root@k8s-node01 ~]# vi /etc/systemd/system/kubelet.service
[Unit]
Description=Kubernetes Kubelet
Documentation=https://github.com/GoogleCloudPlatform/kubernetes
After=docker.service
Requires=docker.service
[Service]
WorkingDirectory=/opt/lib/kubelet
ExecStart=/opt/k8s/bin/kubelet \
--bootstrap-kubeconfig=/opt/k8s/kubelet-bootstrap.kubeconfig \
--cert-dir=/opt/k8s/cert/ \
--kubeconfig=/opt/k8s/kubelet.kubeconfig \
--anonymous-auth=false \
--authorization-mode=Webhook \
--authentication-token-webhook=true \
--client-ca-file=/opt/k8s/cert/ca.pem \
--address=##NODE_IP## \
--cgroup-driver=cgroupfs \
--image-pull-progress-deadline=300s \
--node-labels=node.kubernetes.io/k8s-node=true \
--cluster-dns=10.96.0.2 \
--cluster-domain=cluster.local \
--node-ip=##NODE_IP## \
--port=10250 \
--hostname-override=##NODE_NAME## \
--pod-infra-container-image=registry.cn-hangzhou.aliyuncs.com/google_containers/pause-amd64:3.1 \
--network-plugin=cni \
--cni-conf-dir=/opt/cni/net.d \
--alsologtostderr=true \
--logtostderr=false \
--log-dir=/opt/log/kubernetes \
--v=2
Restart=on-failure
RestartSec=5
KillMode=process
[Install]
WantedBy=multi-user.target
3.6起動を設定する.クbeletのチェックサービスを開始します
systemctl daemon-reload && systemctl enable kubelet && systemctl restart kubelet && systemctl status kubelet
3.7クbeletのTLS証明書リクエストをマスターで承認する
手動approve csrリクエスト
# CSR :
[root@k8s-master01 ~]# kubectl get csr
NAME AGE REQUESTOR CONDITION
node-csr--LyhqMsoBZHufxq_PNLzryNXUZGHhGy1sbdclP6pPoE 12m kubelet-bootstrap Pending
# approve csr:
[root@k8s-master01 ~]# kubectl certificate approve node-csr--LyhqMsoBZHufxq_PNLzryNXUZGHhGy1sbdclP6pPoE
certificatesigningrequest.certificates.k8s.io/node-csr--LyhqMsoBZHufxq_PNLzryNXUZGHhGy1sbdclP6pPoE approved
# ) approve :
[root@k8s-master01 ~]# kubectl get csr
NAME AGE REQUESTOR CONDITION
csr-wzzm5 61s kubelet-bootstrap Approved
自動approve csrリクエスト!
[root@k8s-master01 ~]# cat > /opt/k8s/csr-crb.yaml <
有効な構成:
[root@k8s-master01 ~]# kubectl apply -f /opt/k8s/csr-crb.yaml
clusterrolebinding.rbac.authorization.k8s.io/auto-approve-csrs-for-group created
clusterrolebinding.rbac.authorization.k8s.io/node-client-cert-renewal created
clusterrole.rbac.authorization.k8s.io/approve-node-server-renewal-csr created
clusterrolebinding.rbac.authorization.k8s.io/node-server-cert-renewal created
4.kube-proxyコンポーネントの配備
4.1 kube-proxyバイナリファイルのダウンロード
kubernetes-server-linux-amd64.tar.gz # , ! kube-proxy !
4.2 masterノードでkube-proxy証明書を作成する
masterノードに証明書リクエストファイルを作成するには
[root@k8s-master01 ~]# cat > /opt/k8s/cert/kube-proxy-csr.json << EOF
{
"CN": "system:kube-proxy",
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "CN",
"ST": "BeiJing",
"L": "BeiJing",
"O": "k8s",
"OU": "steams"
}
]
}
EOF
masterノードで証明書と秘密鍵を生成
[root@k8s-master01 ~]# cfssl gencert \
-ca=/opt/k8s/cert/ca.pem \
-ca-key=/opt/k8s/cert/ca-key.pem \
-config=/opt/k8s/cert/ca-config.json \
-profile=kubernetes /opt/k8s/cert/kube-proxy-csr.json | cfssljson -bare /opt/k8s/cert/kube-proxy
#
[root@k8s-master01 ~]# ls /opt/k8s/cert/kube-proxy*
4.3マスターノードにkube-proxyを作成する.kubeconfigファイル
##
[root@kube-master ~]# kubectl config set-cluster kubernetes \
--certificate-authority=/opt/k8s/cert/ca.pem \
--embed-certs=true \
--server=https://192.168.2.210:8443 \
--kubeconfig=/opt/k8s/kube-proxy.kubeconfig
##
[root@kube-master ~]# kubectl config set-credentials kube-proxy \
--client-certificate=/opt/k8s/cert/kube-proxy.pem \
--client-key=/opt/k8s/cert/kube-proxy-key.pem \
--embed-certs=true \
--kubeconfig=/opt/k8s/kube-proxy.kubeconfig
##
[root@kube-master ~]# kubectl config set-context kube-proxy@kubernetes \
--cluster=kubernetes \
--user=kube-proxy \
--kubeconfig=/opt/k8s/kube-proxy.kubeconfig
##
[root@kube-master ~]# kubectl config use-context kube-proxy@kubernetes \
--kubeconfig=/opt/k8s/kube-proxy.kubeconfig
関連ファイルの転送
# node
[root@k8s-master01 ~]# scp /opt/k8s/cert/kube-proxy*.pem root@k8s-node01:/opt/k8s/cert/
# kube-proxy.kubeconfig node
[root@k8s-master01 ~]# scp /opt/k8s/kube-proxy.kubeconfig root@k8s-node01:/opt/k8s/
4.5 nodeノードに対応するkube-proxyのkube-proxyプロファイルを作成する
[root@k8s-node01 ~]# vi /opt/k8s/kube-proxy.config.yaml
apiVersion: kubeproxy.config.k8s.io/v1alpha1
bindAddress: ##NODE_IP##
clientConnection:
kubeconfig: /opt/k8s/kube-proxy.kubeconfig
clusterCIDR: 10.96.0.0/16
healthzBindAddress: ##NODE_IP##:10256
hostnameOverride: ##NODE_NAME##
kind: KubeProxyConfiguration
metricsBindAddress: ##NODE_IP##:10249
mode: "ipvs"
4.6 nodeノードでkube-proxy得systemd unitファイルを作成する
[root@k8s-node01 ~]# vi /etc/systemd/system/kube-proxy.service
[Unit]
Description=Kubernetes Kube-Proxy Server
Documentation=https://github.com/GoogleCloudPlatform/kubernetes
After=network.target
[Service]
WorkingDirectory=/opt/lib/kube-proxy
ExecStart=/opt/k8s/bin/kube-proxy \
--config=/opt/k8s/kube-proxy.config.yaml \
--alsologtostderr=true \
--logtostderr=false \
--log-dir=/opt/log/kubernetes \
--v=2
Restart=on-failure
RestartSec=5
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
4.7起動を設定し、kube-proxyサービスを起動して確認する
systemctl daemon-reload && systemctl enable kube-proxy && systemctl restart kube-proxy && systemctl status kube-proxy
4.8 nodeノード-->ipvsルーティングルールの表示
[root@k8s-node01 ~]# /usr/sbin/ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 10.96.0.1:443 rr
-> 192.168.2.201:6443 Masq 1 0 0
-> 192.168.2.202:6443 Masq 1 0 0
-> 192.168.2.203:6443 Masq 1 0 0
Nodeノード基本コンポーネントの導入完了