kubernetes 1.9.1クラスタ
kubernetes-HA高可用性導入
1.配置アーキテクチャ kubernetesコンポーネント説明 kube-apiserver:クラスタコア、クラスタAPIインタフェース、クラスタの各コンポーネント通信の中枢;クラスタセキュリティ制御;
etcd:クラスタのデータセンターは、クラスタの構成と状態情報を格納するために使用され、非常に重要であり、データが失われるとクラスタは回復できない.したがって、高可用性クラスタの導入は、まずetcdが高可用性クラスタであることである.
kube-scheduler:クラスタPodのスケジューリングセンター;デフォルトのkubeadmインストールの場合--leader-electパラメータはtrueに設定されており、masterクラスタに1つのkube-schedulerだけがアクティブであることを保証します.
kube-controller-manager:クラスタ状態マネージャは、クラスタ状態が期待と異なる場合、kcmはクラスタを所望の状態に戻すように努力します.
kubelet:kubernetes node agentは、node上のdocker engineとの付き合いを担当しています.
kube-proxy:nodeごとに、サービスvipからendpoint podへのトラフィック転送を担当し、現在は主にiptablesルールを設定することによって実現されています.
2.環境 172.16.50.121 morepay01 CentOS 7.4.1708 172.16.50.122 morepay02 CentOS 7.4.1708 172.16.50.123 morepay03 CentOS 7.4.1708 172.16.50.125 morepay04 CentOS 7.4.1708
3.基礎配置
3.1.秘密登録の設定
すべてのパッケージはサーバ172.16.5.1211にアップロードされる.ミラーのコピー、プロファイルのコピーを容易にするために.構成172.16.5.1211他のサーバへの非機密ログイン morepay 01ホストssh-keygen for i in 121 122 123 125;do ssh-copy-id [email protected].$i ; done
3.2.パラメータ調整
すべてのホスト
morepay 01ホスト
他のホストへの配布
効力が生ずる
ヒント
実行コマンドmodprobe br_netfilter
3.3.SELINUXを無効にする
3.4.hosts構成
すべてのホストの追加 172.16.50.121 morepay01 172.16.50.122 morepay02 172.16.50.123 morepay03 172.16.50.125 morepay04 for i in 122 123 125 ; do scp/etc/hosts [email protected].$i:/etc/hosts ; done
4.etcdクラスタ配置
参照先:https://blog.51cto.com/11889458/2105040
ステップ略
5.Dockerインストール
6.kubernetesコンポーネントのインストール
科学的なインターネットダウンロードコンポーネント kubeadm-1.9.1-0.x86_64.rpm kubectl-1.9.1-0.x86_64.rpm kubelet-1.9.1-0.x86_64.rpm kubernetes-cni-0.6.0-0.x86_64.rpm
別のサーバへのコピー
インストール
クbelet起動の設定
7.クラスタの初期化
7.1.kubernetesベースミラーのインポート
科学的なインターネットダウンロードdockerミラー k8s-dns-dnsmasq-nanny-amd64_1.14.7.tar k8s-dns-kube-dns-amd64_1.14.7.tar k8s-dns-sidecar-amd64_1.14.7.tar kube-apiserver-amd64_v1.9.1.tar kube-controller-manager-amd64_v1.9.1.tar kube-proxy-amd64_v1.9.1.tar kube-scheduler-amd64_v1.9.1.tar pause-amd64_3.0.tar
ミラーを別のサーバに配布
ミラーのインポート
7.2.初期化
プロファイルconfig.yamlを作成するには、次の手順に従います.
172.16.5.2000をkeepとして
kubeadmブートクラスタmorepay 01ホスト
コピー/etc/kubernetes/pki/ディレクトリをmorepay 02,morepay 03ホスト
kubeadmブートクラスタmorepay 02,morepay 03ホスト
プロファイルのコピー
kubernetesクラスタのステータスの表示
7.3.flannelをインストールする;ネットワークプラグイン
pods運転状態の表示
8.keepalived取付
健康診断スクリプトの作成check_apiserver.sh;次のようになります.
スクリプトをmorepay 01、morepay 02、morepay 03にコピーします.実行権限の追加
keepalived.confプロファイルを作成します.次のようになります.
プロファイルをmorepay 01,morepay 02,morepay 03にコピー
keepalivedの起動
9.kubernetesがnodeノードに追加
10.kube-proxy構成
podの再作成を再開
11.プラグインのインストール(オプション)
12.アクセスダッシュボード
https://172.16.50.200:6443/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/#!/login
12.1.証明書のエクスポート
ダウンロード/etc/kubernetes/pki/client.pfxファイルインポートブラウザ
12.2.Tokenの表示
13.自動伸縮
サービスを作成する必要があります
テスト、deploymentの作成
horizontalpodautoscalersの作成
hpaの表示
cpu負荷の増加
14.証明書の手動生成
参照先:https://github.com/fandaye/k8s-tls
1.配置アーキテクチャ
etcd:クラスタのデータセンターは、クラスタの構成と状態情報を格納するために使用され、非常に重要であり、データが失われるとクラスタは回復できない.したがって、高可用性クラスタの導入は、まずetcdが高可用性クラスタであることである.
kube-scheduler:クラスタPodのスケジューリングセンター;デフォルトのkubeadmインストールの場合--leader-electパラメータはtrueに設定されており、masterクラスタに1つのkube-schedulerだけがアクティブであることを保証します.
kube-controller-manager:クラスタ状態マネージャは、クラスタ状態が期待と異なる場合、kcmはクラスタを所望の状態に戻すように努力します.
kubelet:kubernetes node agentは、node上のdocker engineとの付き合いを担当しています.
kube-proxy:nodeごとに、サービスvipからendpoint podへのトラフィック転送を担当し、現在は主にiptablesルールを設定することによって実現されています.
2.環境
3.基礎配置
3.1.秘密登録の設定
すべてのパッケージはサーバ172.16.5.1211にアップロードされる.ミラーのコピー、プロファイルのコピーを容易にするために.構成172.16.5.1211他のサーバへの非機密ログイン
3.2.パラメータ調整
すべてのホスト
morepay 01ホスト
`/etc/sysctl.d/k8s.conf ` :
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
他のホストへの配布
for i in 122 123 125 ; do scp /etc/sysctl.d/k8s.conf [email protected].$i:/etc/sysctl.d/k8s.conf ; done
効力が生ずる
for i in 121 122 123 125 ; do ssh [email protected].$i "sysctl -p /etc/sysctl.d/k8s.conf " ; done
ヒント
sysctl: cannot stat /proc/sys/net/bridge/bridge-nf-call-ip6tables: No such file or directory
sysctl: cannot stat /proc/sys/net/bridge/bridge-nf-call-iptables: No such file or directory
実行コマンドmodprobe br_netfilter
3.3.SELINUXを無効にする
for i in 121 122 123 125 ; do ssh [email protected].$i 'setenforce 0 && sed -i "s/SELINUX=enforcing/SELINUX=disabled/" /etc/sysconfig/selinux' ; done
3.4.hosts構成
すべてのホストの追加
4.etcdクラスタ配置
参照先:https://blog.51cto.com/11889458/2105040
ステップ略
5.Dockerインストール
for i in 121 122 123 125 ; do ssh [email protected].$i "yum install docker -y" ; done
for i in 121 122 123 125 ; do ssh [email protected].$i "systemctl start docker.service && systemctl status docker.service && systemctl enable docker.service" ; done
6.kubernetesコンポーネントのインストール
for i in 121 122 123 125 ; do ssh [email protected].$i "mkdir /data/soft -p" ; done
cd /data/soft
科学的なインターネットダウンロードコンポーネント
別のサーバへのコピー
for i in 122 123 125 ; do scp /data/soft/* [email protected].$i:/data/soft ; done
インストール
for i in 121 122 123 125 ; do ssh [email protected].$i "yum install /data/soft/* -y" ; done
クbelet起動の設定
for i in 121 122 123 125 ; do ssh [email protected].$i "systemctl enable kubelet.service" ; done
7.クラスタの初期化
7.1.kubernetesベースミラーのインポート
科学的なインターネットダウンロードdockerミラー
ミラーを別のサーバに配布
for i in 121 122 123 125 ; do ssh [email protected].$i "mkdir /data/images" ; done
for i in 122 123 125 ; do scp /data/images/* [email protected].$i:/data/images ; done
ミラーのインポート
for j in `ls /data/images`; do docker load --input /data/images/$j ; done #
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
gcr.io/google_containers/kube-apiserver-amd64 v1.9.1 e313a3e9d78d 6 days ago 210.4 MB
gcr.io/google_containers/kube-controller-manager-amd64 v1.9.1 4978f9a64966 6 days ago 137.8 MB
gcr.io/google_containers/kube-proxy-amd64 v1.9.1 e470f20528f9 6 days ago 109.1 MB
gcr.io/google_containers/kube-scheduler-amd64 v1.9.1 677911f7ae8f 6 days ago 62.7 MB
gcr.io/google_containers/k8s-dns-sidecar-amd64 1.14.7 db76ee297b85 11 weeks ago 42.03 MB
gcr.io/google_containers/k8s-dns-kube-dns-amd64 1.14.7 5d049a8c4eec 11 weeks ago 50.27 MB
gcr.io/google_containers/k8s-dns-dnsmasq-nanny-amd64 1.14.7 5feec37454f4 11 weeks ago 40.95 MB
gcr.io/google_containers/pause-amd64 3.0 99e59f495ffa 20 months ago 746.9 kB
7.2.初期化
プロファイルconfig.yamlを作成するには、次の手順に従います.
apiVersion: kubeadm.k8s.io/v1alpha1
kind: MasterConfiguration
kubernetesVersion: v1.9.1
networking:
podSubnet: 10.244.0.0/16
apiServerCertSANs:
- morepay01
- morepay02
- morepay03
- 172.16.50.121
- 172.16.50.122
- 172.16.50.123
- 172.16.50.200
apiServerExtraArgs:
endpoint-reconciler-type: "lease"
etcd:
endpoints:
- http://172.16.50.121:2379
- http://172.16.50.122:2379
- http://172.16.50.123:2379
token: "deed3a.b3542929fcbce0f0"
tokenTTL: "0"
172.16.5.2000をkeepとして
kubeadmブートクラスタmorepay 01ホスト
kubeadm init --config=config.yaml
コピー/etc/kubernetes/pki/ディレクトリをmorepay 02,morepay 03ホスト
for i in 122 123 ; do ssh [email protected].$i "mkdir /etc/kubernetes/pki" ; done
for i in 122 123 ; do scp /etc/kubernetes/pki/* [email protected].$i:/etc/kubernetes/pki ; done
kubeadmブートクラスタmorepay 02,morepay 03ホスト
for i in 122 123 ; do ssh [email protected].$i "kubeadm init --config=/data/soft/config.yaml" ; done
プロファイルのコピー
for i in 121 122 123 ; do ssh [email protected].$i "mkdir -p $HOME/.kube && sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config" ; done
kubernetesクラスタのステータスの表示
kubectl get pod --all-namespaces
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system kube-apiserver-morepay01 1/1 Running 0 17m
kube-system kube-apiserver-morepay02 1/1 Running 0 1m
kube-system kube-apiserver-morepay03 1/1 Running 0 29s
kube-system kube-controller-manager-morepay01 1/1 Running 0 17m
kube-system kube-controller-manager-morepay02 1/1 Running 0 1m
kube-system kube-controller-manager-morepay03 1/1 Running 0 41s
kube-system kube-dns-6f4fd4bdf-hh9zg 0/3 Pending 0 18m
kube-system kube-proxy-48k7v 1/1 Running 0 1m
kube-system kube-proxy-m6m7j 1/1 Running 0 2m
kube-system kube-proxy-rl5kz 1/1 Running 0 18m
kube-system kube-scheduler-morepay01 1/1 Running 0 17m
kube-system kube-scheduler-morepay02 1/1 Running 0 1m
kube-system kube-scheduler-morepay03 1/1 Running 0 35s
7.3.flannelをインストールする;ネットワークプラグイン
kubectl create -f kube-flannel.yml
pods運転状態の表示
kubectl get pod --all-namespaces
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system kube-apiserver-morepay01 1/1 Running 0 21m
kube-system kube-apiserver-morepay02 1/1 Running 0 5m
kube-system kube-apiserver-morepay03 1/1 Running 0 4m
kube-system kube-controller-manager-morepay01 1/1 Running 0 21m
kube-system kube-controller-manager-morepay02 1/1 Running 0 5m
kube-system kube-controller-manager-morepay03 1/1 Running 0 4m
kube-system kube-dns-6f4fd4bdf-hh9zg 3/3 Running 0 22m
kube-system kube-flannel-ds-6vwbs 1/1 Running 0 1m
kube-system kube-flannel-ds-7gqv2 1/1 Running 0 1m
kube-system kube-flannel-ds-k8dp9 1/1 Running 0 1m
kube-system kube-proxy-48k7v 1/1 Running 0 6m
kube-system kube-proxy-m6m7j 1/1 Running 0 6m
kube-system kube-proxy-rl5kz 1/1 Running 0 22m
kube-system kube-scheduler-morepay01 1/1 Running 0 21m
kube-system kube-scheduler-morepay02 1/1 Running 0 5m
kube-system kube-scheduler-morepay03 1/1 Running 0 4m
8.keepalived取付
for i in 121 122 123 ; do ssh [email protected].$i "yum install keepalived -y" ; done
for i in 121 122 123 ; do ssh [email protected].$i "systemctl enable keepalived" ; done
健康診断スクリプトの作成check_apiserver.sh;次のようになります.
#!/bin/bash
err=0
for k in $( seq 1 10 )
do
check_code=$(ps -ef|grep kube-apiserver | wc -l)
if [ "$check_code" = "1" ]; then
err=$(expr $err + 1)
sleep 5
continue
else
err=0
break
fi
done
if [ "$err" != "0" ]; then
echo "systemctl stop keepalived"
/usr/bin/systemctl stop keepalived
exit 1
else
exit 0
fi
スクリプトをmorepay 01、morepay 02、morepay 03にコピーします.実行権限の追加
for i in 121 122 123 ; do scp /data/soft/check_apiserver.sh [email protected].$i:/etc/keepalived/ ; done
for i in 121 122 123 ; do ssh [email protected].$i "chmod +x /etc/keepalived/check_apiserver.sh" ; done
keepalived.confプロファイルを作成します.次のようになります.
! Configuration File for keepalived
global_defs {
router_id LVS_DEVEL
}
vrrp_script chk_apiserver {
script "/etc/keepalived/check_apiserver.sh"
interval 60
weight -5
fall 3
rise 2
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 53
priority 100
advert_int 2
authentication {
auth_type PASS
auth_pass 4be37dc3b4c90194d1600c483e10ad1d
}
virtual_ipaddress {
172.16.50.200
}
track_script {
chk_apiserver
}
}
プロファイルをmorepay 01,morepay 02,morepay 03にコピー
for i in 121 122 123 ; do scp /data/soft/keepalived.conf [email protected].$i:/etc/keepalived/keepalived.conf ; done
keepalivedの起動
for i in 121 122 123 ; do ssh [email protected].$i "systemctl start keepalived" ; done
9.kubernetesがnodeノードに追加
for i in 125 ; do echo $i ; ssh [email protected].$i "kubeadm join --token deed3a.b3542929fcbce0f0 172.16.50.200:6443 --discovery-token-ca-cert-hash sha256:d49e5784284ad741aaa8259b9987d52a394b5d76d137d179951f4979e27eb58d" ; done
10.kube-proxy構成
kubectl edit -n kube-system configmap/kube-proxy
server: https://172.16.50.200:6443
podの再作成を再開
kubectl get pods --all-namespaces -o wide | grep proxy
kubectl delete pod -n kube-system kube-proxy-xxxxx
11.プラグインのインストール(オプション)
kubectl create -f heapster.yaml
kubectl create -f influxdb.yaml
kubectl create -f kubernetes-dashboard.yaml
kubectl create -f grafana.yaml
12.アクセスダッシュボード
https://172.16.50.200:6443/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/#!/login
12.1.証明書のエクスポート
cat /etc/kubernetes/admin.conf | grep client-certificate-data | awk -F ': ' '{print $2}' | base64 -d > /etc/kubernetes/pki/client.crt
cat /etc/kubernetes/admin.conf | grep client-key-data | awk -F ': ' '{print $2}' | base64 -d > /etc/kubernetes/pki/client.key
openssl pkcs12 -export -inkey /etc/kubernetes/pki/client.key -in /etc/kubernetes/pki/client.crt -out /etc/kubernetes/pki/client.pfx
ダウンロード/etc/kubernetes/pki/client.pfxファイルインポートブラウザ
12.2.Tokenの表示
kubectl get Secret --all-namespaces | grep dashboard-admin
kubectl describe Secret kubernetes-dashboard-admin-token-xxxx -n kube-system
13.自動伸縮
サービスを作成する必要があります
kubectl create -f deploy.yaml
テスト、deploymentの作成
kubectl run php-apache --image=172.16.50.116/google_containers/hpa-example:latest --requests=cpu=200m --expose --port=80
horizontalpodautoscalersの作成
kubectl autoscale deployment php-apache --cpu-percent=50 --min=1 --max=10
hpaの表示
kubectl get hpa
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
php-apache Deployment/php-apache 0% / 50% 1 10 1 9m
cpu負荷の増加
while true; do wget -q -O- 172.16.50.121:30150; done
hpa
kubectl get hpa
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
php-apache Deployment/php-apache 290% / 50% 1 10 4 11m
14.証明書の手動生成
参照先:https://github.com/fandaye/k8s-tls