(ECSに適用)Kubeadmの展開エンタープライズクラスの高可用性Kubernetes

(ECSに適用)Kubeadmの展開エンタープライズクラスの高可用性Kubernetes

1.準備

入門

さまざまなオプションを装備したkubernetesこのチュートリアル文書は公式チュートリアルと、エンタープライズクラウドの練習で実行されているビジネス・シナリオに基づいて展開され、各ウィジェットは、いくつかのテストの後に選択され、安定性の特性があります。

  1. 上記のCentOS 7.6
  2. 1.16.0 Kubernetes
  • ドッカー18.09.7
  • フランネル3.3
  • nginxの-進入1.5.3
  1. プライマリノードのクラスタ最大3つのマスター・メイク、SLBによってネットワーク内の負荷分散
  2. クラスタ内の作業の複数のワーカーノードを形成し、外部ネットワークSLBのロードバランシング

トポロジー

トポロジー

ホストの設定

インスタンス名 IPの例 リマーク
K8S-マスター-1 10.23.0.69 4vCPU 8Gメモリ100Gハードドライブ
K8S-マスター2 10.23.0.79 4vCPU 8Gメモリ100Gハードドライブ
K8S-マスター2 10.23.0.79 4vCPU 8Gメモリ100Gハードドライブ
SLBネットワーク 10.23.0.87 ランダムに割り当てられました

システム環境設定

閉じるスワップパーティション、firewalld、オンタイム同期
のホスト名を変更します

hostnamectl set-hostname k8s-master-1

閉じるSELinuxの

sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config && setenforce 0

変更の/ etc / hosts

10.23.0.69 k8s-master-1
10.23.0.79 k8s-master-2
10.23.0.81 k8s-master-3
10.23.0.63 k8s-worker-1

ロードIPVS

cat > /etc/sysconfig/modules/ipvs.modules
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr 
modprobe -- ip_vs_wrr 
modprobe -- ip_vs_sh
modprobe -- nf_conntrack_ipv4

スクリプトの実行

chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack_ipv4

SLB ApiServerの作成

ポートを聞く:6443、バックエンドサービス:すべてのマスターノード(source_addressにセッションが開いたまま)

2.インストールサービス

インストールのドッキングウィンドウ

アリクラウドdocker1.18をインストールし、起動するためのスクリプトを使用して

curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun 
systemctl enable docker && systemctl start docker

設定daemon.json

cat /etc/docker/daemon.json
{
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  },
  "storage-driver": "overlay2",
  "storage-opts": [
    "overlay2.override_kernel_check=true"
  ],
  "registry-mirrors": ["https://uyah70su.mirror.aliyuncs.com"]
}

ロードおよび再起動

systemctl daemon-reload && systemctl restart docker

安装kubeadm、オムレツ、kubectl

アリクラウドyumの設定kubernetesソース

cat  /etc/yum.repos.d/kubenetes.repo 
[kubernetes]
name=Kubernetes Repo
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=0

ソフトウェアの対応バージョンをインストールします。

yum install -y kubelet-1.16.0-0 kubeadm-1.16.0-0 kubectl-1.16.0-0 --disableexcludes=kubernetes

セットのブート(初期化が自動的に開始された後、DOはサービス、それ以外の場合はエラーを開始しません)

systemctl enable kubelet.service

最初のマスターノードを初期化3.

ホストレコードを追加します。

echo "127.0.0.1 apiserver.k8s" >> /etc/hosts

初期化ファイルを作成します。

cat > kubeadm-config.yaml <<EOF
apiVersion: kubeadm.k8s.io/v1beta2
kind: ClusterConfiguration
kubernetesVersion: v1.16.0
imageRepository: registry.cn-hangzhou.aliyuncs.com/google_containers
controlPlaneEndpoint: "apiserver.k8s:6443"
networking:
  serviceSubnet: "179.10.0.0/16”
  podSubnet: "179.20.0.0/16"
  dnsDomain: “cluster.local”
---
apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
featureGates:
  SupportIPVSProxyMode: true
mode: ipvs

ミラー初期ダウンロード

kubeadm config images pull --config kubeadm-config.yaml

初期化を実行

kubeadm init --config=kubeadm-config.yaml --upload-certs

初期化が成功した内容を以下と、第1ノードマスタ初期化に参加するために、第二の参加ノードワーカーのための初期化を生じます

Your Kubernetes control-plane has initialized successfully!

To start using your cluster, you need to run the following as a regular user:

  mkdir -p $HOME/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config

You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
  https://kubernetes.io/docs/concepts/cluster-administration/addons/

You can now join any number of the control-plane node running the following command on each as root:


  kubeadm join apiserver.k8s:6443 --token jjo28g.q573caofz5i9ef02 \
    --discovery-token-ca-cert-hash sha256:7b5a619a9270ec7c5843679c4bf1021ac4da5e61a3118a298c7c04e66d26e66a \
    --control-plane --certificate-key 81e3f41062e3a039c31339f25d7dac4a4f7b8bc8adbc278014919ed4615bede3

Please note that the certificate-key gives access to cluster sensitive data, keep it secret!
As a safeguard, uploaded-certs will be deleted in two hours; If necessary, you can use 
"kubeadm init phase upload-certs --upload-certs" to reload certs afterward.

Then you can join any number of worker nodes by running the following on each as root:


kubeadm join apiserver.k8s:6443 --token jjo28g.q573caofz5i9ef02 \
    --discovery-token-ca-cert-hash sha256:7b5a619a9270ec7c5843679c4bf1021ac4da5e61a3118a298c7c04e66d26e66a 

プロンプトに従います

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

ビューポッドの動作が(なしネットワークプラグ、一時保留状態をcorednsなし)

[root@k8s-master-1 ~]# kubectl get pod -n kube-system -o wide
NAME                                   READY   STATUS    RESTARTS   AGE     IP           NODE           NOMINATED NODE   READINESS GATES
coredns-58cc8c89f4-45br7               0/1     Pending   0          7m12s   <none>       <none>         <none>           <none>
coredns-58cc8c89f4-8b7fv               0/1     Pending   0          7m12s   <none>       <none>         <none>           <none>
etcd-k8s-master-1                      1/1     Running   0          6m11s   10.23.0.69   k8s-master-1   <none>           <none>
kube-apiserver-k8s-master-1            1/1     Running   0          6m24s   10.23.0.69   k8s-master-1   <none>           <none>
kube-controller-manager-k8s-master-1   1/1     Running   0          6m25s   10.23.0.69   k8s-master-1   <none>           <none>
kube-proxy-rw96m                       1/1     Running   0          7m12s   10.23.0.69   k8s-master-1   <none>           <none>
kube-scheduler-k8s-master-1            1/1     Running   0          6m17s   10.23.0.69   k8s-master-1   <none>           <none>

CNIネットワークプラグインのインストール、サポートcorednsは(フランネルを使用してここに)開始

ダウンロードファイルYML

wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml`

ネットワークの構成を変更します

"Network": "179.20.0.0/16",

フランネルのネットワークを作成します。

kubectl apply -f kube-flannel.yml

前記第二、第三のマスターノードの初期化

MASTER2、master3上で実行

ホストレコードを追加します。

echo "127.0.0.1 apiserver.k8s" >> /etc/hosts

コマンドのMster実行コマンドkubeadmは--print-参加-コマンドを作成するトークン取得使用し、参加することができます。

kubeadm join apiserver.k8s:6443 --token jjo28g.q573caofz5i9ef02 \
    --discovery-token-ca-cert-hash sha256:7b5a619a9270ec7c5843679c4bf1021ac4da5e61a3118a298c7c04e66d26e66a \
    --control-plane --certificate-key 81e3f41062e3a039c31339f25d7dac4a4f7b8bc8adbc278014919ed4615bede3

This node has joined the cluster and a new control plane instance was created:

* Certificate signing request was sent to apiserver and approval was received.
* The Kubelet was informed of the new secure connection details.
* Control plane (master) label and taint were applied to the new node.
* The Kubernetes control plane instances scaled up.
* A new etcd member was added to the local/stacked etcd cluster.

To start administering your cluster from this node, you need to run the following as a regular user:

     mkdir -p $HOME/.kube
     sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
     sudo chown $(id -u):$(id -g) $HOME/.kube/config

Run 'kubectl get nodes' to see this node join the cluster.

上記の手順によると、

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

クラスタの動作を確認

[root@k8s-master-2 ~]# kubectl get nodes
NAME           STATUS   ROLES    AGE   VERSION
k8s-master-1   Ready    master   64m   v1.16.0
k8s-master-2   Ready    master   54m   v1.16.0
k8s-master-3   Ready    master   50m   v1.16.0

PODの動作を確認

[root@k8s-master-2 ~]# kubectl get pod -A
NAMESPACE     NAME                                   READY   STATUS    RESTARTS   AGE
kube-system   coredns-67c766df46-qzgt2               1/1     Running   0          72m
kube-system   coredns-67c766df46-zq76c               1/1     Running   0          72m
kube-system   etcd-k8s-master-1                      1/1     Running   0          71m
kube-system   etcd-k8s-master-2                      1/1     Running   0          62m
kube-system   etcd-k8s-master-3                      1/1     Running   0          58m
kube-system   kube-apiserver-k8s-master-1            1/1     Running   0          71m
kube-system   kube-apiserver-k8s-master-2            1/1     Running   0          62m
kube-system   kube-apiserver-k8s-master-3            1/1     Running   0          58m
kube-system   kube-controller-manager-k8s-master-1   1/1     Running   1          71m
kube-system   kube-controller-manager-k8s-master-2   1/1     Running   0          62m
kube-system   kube-controller-manager-k8s-master-3   1/1     Running   0          58m
kube-system   kube-flannel-ds-amd64-754lv            1/1     Running   2          62m
kube-system   kube-flannel-ds-amd64-9x5bk            1/1     Running   0          58m
kube-system   kube-flannel-ds-amd64-cscmt            1/1     Running   0          69m
kube-system   kube-proxy-8j4sk                       1/1     Running   0          58m
kube-system   kube-proxy-ct46p                       1/1     Running   0          62m
kube-system   kube-proxy-rdjrg                       1/1     Running   0          72m
kube-system   kube-scheduler-k8s-master-1            1/1     Running   1          71m
kube-system   kube-scheduler-k8s-master-2            1/1     Running   0          62m
kube-system   kube-scheduler-k8s-master-3            1/1     Running   0          58m

ビューetcdクラスタのステータス

[root@k8s-master-2 ~]# kubectl -n kube-system exec etcd-k8s-master-1 -- etcdctl     --endpoints=https://10.23.0.69:2379     --ca-file=/etc/kubernetes/pki/etcd/ca.crt     --cert-file=/etc/kubernetes/pki/etcd/server.crt     --key-file=/etc/kubernetes/pki/etcd/server.key cluster-health
member 87decc97a1526c9 is healthy: got healthy result from https://10.23.0.81:2379
member 689b586b03109caa is healthy: got healthy result from https://10.23.0.79:2379
member 74607e593fdaa944 is healthy: got healthy result from https://10.23.0.69:2379

IPVS(手動で変更する必要、INTIない効果である場合)を確認してください

KUBE-プロキシログ、Proxier IPVS使用して出力の最初の行を参照してください。

[root@k8s-master-1 ~]# kubectl -n kube-system logs -f kube-proxy-h782c 
I0210 02:43:15.059064       1 node.go:135] Successfully retrieved node IP: 10.23.0.79
I0210 02:43:15.059101       1 server_others.go:176] Using ipvs Proxier.
W0210 02:43:15.059254       1 proxier.go:420] IPVS scheduler not specified, use rr by default
I0210 02:43:15.059447       1 server.go:529] Version: v1.16.0

ワーカーノードの初期化

ホストレコードを追加します。
echo "10.23.0.87 apiserver.k8s" >> /etc/hosts

ワーカーノードの実装では、joinコマンドをコマンドkubeadmは--print-参加-コマンドを作成するトークン取得使用することができます。

kubeadm join apiserver.k8s:6443 --token uxafy2.8ri0m2jibivycllh     --discovery-token-ca-cert-hash sha256:7b5a619a9270ec7c5843679c4bf1021ac4da5e61a3118a298c7c04e66d26e66a

マスターのinit設定ファイルをコピーし、実行(またはワーカーノードは、コマンドを実行することはできません)マスター上

ssh k8s-worker-1  mkdir -p $HOME/.kube
scp -r $HOME/.kube/config k8s-worker-1:/root/.kube/
ssh k8s-worker-1  sudo chown $(id -u):$(id -g) $HOME/.kube/config

ビューノードステータス

[root@k8s-worker-1 ~]# kubectl get nodes
NAME           STATUS   ROLES    AGE     VERSION
k8s-master-1   Ready    master   42h     v1.16.0
k8s-master-2   Ready    master   42h     v1.16.0
k8s-master-3   Ready    master   42h     v1.16.0
k8s-worker-1   Ready    <none>   6m11s   v1.16.0

6.イングレスコントローラ

マスターノード上で

kubectl apply -f https://kuboard.cn/install-script/v1.16.2/nginx-ingress.yaml

リスニング、公共SLB侵入の作成、ポート:80、443、バックエンドサービス:すべてのワーカーノード(source_addressにセッションが開いたまま)

DNSの設定:test.myk8s.comは、パブリックネットワークアドレスSLBにドメイン名を解決します

7.テストクラスタ・アプリケーション(Tomcatに例えば)

作成dedeployment

kubectl apply -f deployment/deployment-tomcat.yaml

---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: deployment-tomcat
spec:
  selector:
    matchLabels:
      app: tomcat
  replicas: 2
  template:
    metadata:
      labels:
        app: tomcat
    spec:
      containers:
      - name: tomcat
        image: rightctrl/tomcat
        imagePullPolicy: Always
        ports:
        - containerPort: 8080
---
kind: Service
apiVersion: v1
metadata:
  name: service-tomcat
spec:
  selector:
    app: tomcat
  ports:
    - protocol: TCP
      port: 8080
      targetPort: 8080
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: ingress-tomcat
spec:
  backend:
    serviceName: service-tomcat
    servicePort: 8080

作成イングレス

kubectl apply -f ingress/ingress-tomcat.yaml

kind: Ingress
apiVersion: extensions/v1beta1
metadata:
  name: ingress-tomcat
spec:
  rules:
  - host: test.myk8s.com
    http:
      paths:
      - path:
        backend:
          serviceName: service-tomcat
          servicePort: 8080

ルックの進入が正常に作成され

[root@k8s-master-1 ~]# kubectl describe ingresses.
Name:             ingress-tomcat
Namespace:        default
Address:          
Default backend:  default-http-backend:80 (<none>)
Rules:
  Host               Path  Backends
  ----               ----  --------
  test.myk8s.com  
                        service-tomcat:8080 (179.20.3.7:8080,179.20.3.8:8080)
Annotations:
  kubectl.kubernetes.io/last-applied-configuration:  {"apiVersion":"extensions/v1beta1","kind":"Ingress","metadata":{"annotations":{},"name":"ingress-tomcat","namespace":"default"},"spec":{"rules":[{"host":"test.myk8s.com","http":{"paths":[{"backend":{"serviceName":"service-tomcat","servicePort":8080},"path":null}]}}]}}

Events:  <none>

アクセスドメイン

可用性クラスタを確認します8.

閉じるMASTER1ノード、ノードの状態が正常で、通常のサービス

[root@k8s-master-3 ~]# kubectl get node
NAME           STATUS     ROLES    AGE     VERSION
k8s-master-1   NotReady   master   3d15h   v1.16.0
k8s-master-2   Ready      master   3d15h   v1.16.0
k8s-master-3   Ready      master   3d15h   v1.16.0
k8s-worker-1   Ready      <none>   44h     v1.16.0
[root@k8s-master-3 ~]# curl -I test.myk8s.com
HTTP/1.1 200 OK
Date: Wed, 12 Feb 2020 03:17:31 GMT
Content-Type: text/html;charset=UTF-8
Connection: keep-alive
Vary: Accept-Encoding
Set-Cookie: SERVERID=668f1fc010a1560f1a6962e4c40b0c6a|1581477451|1581477451;Path=/

閉じるマスター2ノード、ノード状態の障害、通常のサービス

[root@k8s-master-3 ~]# kubectl get node
Error from server: etcdserver: request timed out
[root@k8s-master-3 ~]# curl -I test.myk8s.com
HTTP/1.1 200 OK
Date: Wed, 12 Feb 2020 03:18:59 GMT
Content-Type: text/html;charset=UTF-8
Connection: keep-alive
Vary: Accept-Encoding
Set-Cookie: SERVERID=668f1fc010a1560f1a6962e4c40b0c6a|1581477539|1581477539;Path=/
リリース元の2件の記事 ウォンの賞賛1 ビュー42

おすすめ

転載: blog.csdn.net/maicos/article/details/104296261
おすすめ