CentOS 7インストールKubernetesレコード(ca認証付き)
20004 ワード
CentOS 7インストールKubernetesレコード(ca認証付き)
一、環境準備
サーバに静的IPを配置するのが望ましい.そうしないと、シャットダウン後の多くの場所のipを修正する必要がある.参考記事
1.すべてのノードがホスト名で解決できるようにhostを構成します。
ホスト名は上の記事リンクを参照して変更できます
$ vi /etc/hosts
# (ip servername )
172.16.136.201 server01
172.16.136.202 server02
172.16.136.203 server03
2.すべてのノードがファイアウォールを閉じる
systemctl disable firewalld
systemctl stop firewalld
3.すべてのノードがSELinuxを無効にする
setenforce 0
4.すべてのノードがNetworkManagerをシャットダウンする(仮想マシン環境)
systemctl stop NetworkManager
systemctl disable NetworkManager
VM環境では
Failed to start LSB: Bring up/down networking.
エラーが発生し、networkが起動できない場合があります.5.swapを閉じる
性能のために
swapoff -a
二、Dockerのインストール(すべてのノード)
1.インストールスクリプト
wget -qO- https://get.docker.com/ | sh
2.dockerのネットワーク転送ルールの変更
vi /lib/systemd/system/docker.service
# ExecStart=xxx, , :(k8s )
ExecStartPost=/sbin/iptables -I FORWARD -s 0.0.0.0/0 -j ACCEPT
3.オプションでdockerにアクセラレータを設定
DaoCloudにアカウントを登録して無料で申請できます.ページの下部にあるアクセルオプションです.
curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://0ed63f2c.m.daocloud.io
4.構成を有効にしdockerを起動する
systemctl daemon-reload
systemctl start docker
systemctl enable docker
5.インストール完了の確認
$ docker version
Client:
Version: 18.03.0-ce
API version: 1.37
Go version: go1.9.4
Git commit: 0520e24
Built: Wed Mar 21 23:09:15 2018
OS/Arch: linux/amd64
Experimental: false
Orchestrator: swarm
Server:
Engine:
Version: 18.03.0-ce
API version: 1.37 (minimum version 1.12)
Go version: go1.9.4
Git commit: 0520e24
Built: Wed Mar 21 23:13:03 2018
OS/Arch: linux/amd64
Experimental: false
三、Kubernetesインストール
1.システムパラメータの設定(すべてのノード)
#
cat < /etc/sysctl.d/k8s.conf
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
#
sysctl -p /etc/sysctl.d/k8s.conf
2.kubernetesバイナリファイルのダウンロード(すべてのノード)
ダウンロードアドレス
ダウンロードが完了したら、サーバーユーザーディレクトリにアップロードして解凍し、そのディレクトリをPATH環境変数に追加します.
tar -zxf kubernetes-bins.tar.gz;rm -rf kubernetes-bins.tar.gz;mv kubernetes-bins bin
#
vim /etc/profile
export PATH=$PATH:/root/bin
source /etc/profile
3.プロファイルをダウンロードしてプロファイルを生成する(すべてのノード)
yum install git
でGitを取り付けるgit clone https://github.com/KingBoyWorld/kubernetes-starter
3.1権限認証付きプロファイルの生成(すべてのノード)
cd ~/kubernetes-starter && vi config.properties && ./gen-config.sh with-ca
プライマリノードがhttpsを使用していることに注意してください.次の構成例です.
#kubernetes ,eg: /home/michael/bin
BIN_PATH=/root/bin
# ip, eg: 192.168.1.102
NODE_IP=172.16.136.201
#etcd , eg: http://192.168.1.102:2379
# etcd 。 :http://${MASTER_IP}:2379 (MASTER_IP ip)
ETCD_ENDPOINTS=https://172.16.136.202:2379
#kubernetes ip , eg: 192.168.1.102
MASTER_IP=172.16.136.202
4.cfsslをインストールし、ルート証明書(すべてのノード)を生成
4.1 cfssl(すべてのノード)のインストール
証明書の生成に使用
wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64 && wget https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64 && chmod +x cfssl_linux-amd64 cfssljson_linux-amd64 && mv cfssl_linux-amd64 /usr/local/bin/cfssl && mv cfssljson_linux-amd64 /usr/local/bin/cfssljson
cfssl version
4.2ルート証明書の生成(マスターノード)
mkdir -p /etc/kubernetes/ca && cp ~/kubernetes-starter/target/ca/ca-config.json /etc/kubernetes/ca && cp ~/kubernetes-starter/target/ca/ca-csr.json /etc/kubernetes/ca && cd /etc/kubernetes/ca && cfssl gencert -initca ca-csr.json | cfssljson -bare ca && ls && cd ~/kubernetes-starter
5.ETCDサービスのインストール(メインノード)
5.1 ETCD証明書の生成(マスターノード)
mkdir -p /etc/kubernetes/ca/etcd && cp ~/kubernetes-starter/target/ca/etcd/etcd-csr.json /etc/kubernetes/ca/etcd/ && cd /etc/kubernetes/ca/etcd/ && cfssl gencert -ca=/etc/kubernetes/ca/ca.pem -ca-key=/etc/kubernetes/ca/ca-key.pem -config=/etc/kubernetes/ca/ca-config.json -profile=kubernetes etcd-csr.json | cfssljson -bare etcd && ls && cd ~/kubernetes-starter
5.2 ETCDのインストールと起動(メインノード)
mkdir -p /var/lib/etcd && cp ~/kubernetes-starter/target/master-node/etcd.service /lib/systemd/system/ && systemctl daemon-reload && systemctl enable etcd && systemctl start etcd
インストールが完了したことを確認
$ ETCDCTL_API=3 etcdctl \
--endpoints=https://172.16.136.202:2379 \
--cacert=/etc/kubernetes/ca/ca.pem \
--cert=/etc/kubernetes/ca/etcd/etcd.pem \
--key=/etc/kubernetes/ca/etcd/etcd-key.pem \
endpoint health
#
https://172.16.136.202:2379 is healthy: successfully committed proposal: took = 1.04668ms
6.APIServerのインストール(マスターノード)
6.1証明書の生成(マスターノード)
mkdir -p /etc/kubernetes/ca/kubernetes && cp ~/kubernetes-starter/target/ca/kubernetes/kubernetes-csr.json /etc/kubernetes/ca/kubernetes/ && cd /etc/kubernetes/ca/kubernetes/ && cfssl gencert -ca=/etc/kubernetes/ca/ca.pem -ca-key=/etc/kubernetes/ca/ca-key.pem -config=/etc/kubernetes/ca/ca-config.json -profile=kubernetes kubernetes-csr.json | cfssljson -bare kubernetes && ls && cd ~/kubernetes-starter
6.2 token認証ファイルの生成(プライマリノード)
ランダムtokenの生成
$ head -c 16 /dev/urandom | od -An -t x | tr -d ' '
8afdf3c4eb7c74018452423c29433609
tokenを固定形式で書き込む.csv、tokenコンテンツの置き換えに注意
echo "8afdf3c4eb7c74018452423c29433609,kubelet-bootstrap,10001,\"system:kubelet-bootstrap\"" > /etc/kubernetes/ca/kubernetes/token.csv
6.3 APIServer(プライマリノード)の起動
cp ~/kubernetes-starter/target/master-node/kube-apiserver.service /lib/systemd/system/ && systemctl daemon-reload && systemctl enable kube-apiserver.service && systemctl start kube-apiserver && cd ~/kubernetes-starter
検証#ケンショウ#
journalctl -f -u kube-apiserver
7.ControllerManagerのインストール(メインノード)
インストール
cp ~/kubernetes-starter/target/master-node/kube-controller-manager.service /lib/systemd/system/ && systemctl daemon-reload && systemctl enable kube-controller-manager && systemctl start kube-controller-manager
検証#ケンショウ#
journalctl -f -u kube-controller-manager
8.Schedulerのインストール(メインノード)
インストール
cp ~/kubernetes-starter/target/master-node/kube-scheduler.service /lib/systemd/system/ && systemctl enable kube-scheduler.service && systemctl start kube-scheduler
検証#ケンショウ#
journalctl -f -u kube-scheduler
9.kubectl(プライマリノード)の構成
9.1証明書の生成(プライマリノード)
mkdir -p /etc/kubernetes/ca/admin && cp ~/kubernetes-starter/target/ca/admin/admin-csr.json /etc/kubernetes/ca/admin/ && cd /etc/kubernetes/ca/admin/ && cfssl gencert -ca=/etc/kubernetes/ca/ca.pem -ca-key=/etc/kubernetes/ca/ca-key.pem -config=/etc/kubernetes/ca/ca-config.json -profile=kubernetes admin-csr.json | cfssljson -bare admin && ls && cd ~/kubernetes-starter
9.2 kubectlの構成(プライマリノード)
注意IPアドレスの変更
kubectl config set-cluster kubernetes --certificate-authority=/etc/kubernetes/ca/ca.pem --embed-certs=true --server=https://172.16.136.202:6443 && kubectl config set-credentials admin --client-certificate=/etc/kubernetes/ca/admin/admin.pem --embed-certs=true --client-key=/etc/kubernetes/ca/admin/admin-key.pem && kubectl config set-context kubernetes --cluster=kubernetes --user=admin && kubectl config use-context kubernetes
生成されたファイルの内容の表示
cat ~/.kube/config
検証#ケンショウ#
$ kubectl get componentstatus
NAME STATUS MESSAGE ERROR
controller-manager Healthy ok
etcd-0 Healthy {"health": "true"}
scheduler Healthy ok
10 calico-node(すべてのノード)の構成
10.1証明書の生成(マスターノード)
mkdir -p /etc/kubernetes/ca/calico && cp ~/kubernetes-starter/target/ca/calico/calico-csr.json /etc/kubernetes/ca/calico/ && cd /etc/kubernetes/ca/calico/ && cfssl gencert -ca=/etc/kubernetes/ca/ca.pem -ca-key=/etc/kubernetes/ca/ca-key.pem -config=/etc/kubernetes/ca/ca-config.json -profile=kubernetes calico-csr.json | cfssljson -bare calico && ls && cd ~/kubernetes-starter
10.2証明書を他のマシンにコピーする(マスターノード)
2台のマシンに
/etc/kubernetes
ディレクトリを作成する必要がある場合がありますscp -r /etc/kubernetes/ca/ root@172.16.136.201:/etc/kubernetes/ca/
scp -r /etc/kubernetes/ca/ root@172.16.136.201:/etc/kubernetes/ca/
10.2 calio-node(すべてのノード)の起動
dockerミラーをダウンロードする必要がありますが、遅くなります.
cp ~/kubernetes-starter/target/all-node/kube-calico.service /lib/systemd/system/ && systemctl daemon-reload && systemctl enable kube-calico && systemctl start kube-calico
ログの表示
journalctl -f -u kube-calico
検証#ケンショウ#
calicoctl node status
11クbelet(ワークノード)のインストール
11.1構成表示(マスターノード)
# clusterrole
$ kubectl -n kube-system get clusterrole
# token
$ cat /etc/kubernetes/ca/kubernetes/token.csv
8afdf3c4eb7c74018452423c29433609,kubelet-bootstrap,10001,"system:kubelet-bootstrap"
11.2環境準備
(ワークノード)
mkdir -p /var/lib/kubelet && mkdir -p /etc/kubernetes && mkdir -p /etc/cni/net.d
(プライマリノード)
kubectl create clusterrolebinding kubelet-bootstrap --clusterrole=system:node-bootstrapper --user=kubelet-bootstrap
11.3 bootstrapを生成する.kubeconfigプロファイル(ワークノード)
注意IPアドレスとtokenの置換
kubectl config set-cluster kubernetes --certificate-authority=/etc/kubernetes/ca/ca.pem --embed-certs=true --server=https://172.16.136.202:6443 --kubeconfig=bootstrap.kubeconfig && kubectl config set-credentials kubelet-bootstrap --token=8afdf3c4eb7c74018452423c29433609 --kubeconfig=bootstrap.kubeconfig && kubectl config set-context default --cluster=kubernetes --user=kubelet-bootstrap --kubeconfig=bootstrap.kubeconfig && kubectl config use-context default --kubeconfig=bootstrap.kubeconfig && mv bootstrap.kubeconfig /etc/kubernetes/
11.4 cni構成(ワークノード)
cp ~/kubernetes-starter/target/worker-node/10-calico.conf /etc/cni/net.d/
11.5クbeletサービスの起動(ワークノード)
cp ~/kubernetes-starter/target/worker-node/kubelet.service /lib/systemd/system/ && systemctl daemon-reload && systemctl enable kubelet && systemctl start kubelet
# kubelet master worker ( worker tls )
#--------* *---------
$ kubectl get csr|grep 'Pending' | awk '{print $1}'| xargs kubectl certificate approve
#-----------------------------
ログの確認
journalctl -f -u kubelet
12 kube-proxy(ワークノード)のインストール
作業ディレクトリの作成(作業ノード)
mkdir -p /var/lib/kube-proxy
12.1証明書の生成(ワークノード)
mkdir -p /etc/kubernetes/ca/kube-proxy && cp ~/kubernetes-starter/target/ca/kube-proxy/kube-proxy-csr.json /etc/kubernetes/ca/kube-proxy/ && cd /etc/kubernetes/ca/kube-proxy/ && cfssl gencert -ca=/etc/kubernetes/ca/ca.pem -ca-key=/etc/kubernetes/ca/ca-key.pem -config=/etc/kubernetes/ca/ca-config.json -profile=kubernetes kube-proxy-csr.json | cfssljson -bare kube-proxy && ls && cd ~/kubernetes-starter
12.2 kube-proxyを生成する.kubeconfig構成(ワークノード)
注意IPアドレスの置換
kubectl config set-cluster kubernetes --certificate-authority=/etc/kubernetes/ca/ca.pem --embed-certs=true --server=https://172.16.136.202:6443 --kubeconfig=kube-proxy.kubeconfig && kubectl config set-credentials kube-proxy --client-certificate=/etc/kubernetes/ca/kube-proxy/kube-proxy.pem --client-key=/etc/kubernetes/ca/kube-proxy/kube-proxy-key.pem --embed-certs=true --kubeconfig=kube-proxy.kubeconfig && kubectl config set-context default --cluster=kubernetes --user=kube-proxy --kubeconfig=kube-proxy.kubeconfig && kubectl config use-context default --kubeconfig=kube-proxy.kubeconfig && mv kube-proxy.kubeconfig /etc/kubernetes/kube-proxy.kubeconfig
12.3 kube-proxy(ワークノード)の起動
cp ~/kubernetes-starter/target/worker-node/kube-proxy.service /lib/systemd/system/ && systemctl daemon-reload && yum -y install conntrack && systemctl enable kube-proxy && systemctl start kube-proxy
けんさ
journalctl -f -u kube-proxy
13 kube-dnsの配備(プライマリノード)
kubectl create -f ~/kubernetes-starter/target/services/kube-dns.yaml
検証#ケンショウ#
kubectl -n kube-system get pods