Kubeadmを使用したKubernetesの導入


導入環境
1つのMasterノード、2つのノード.すべてのノードのコンピュータ名を構成し、hostsポインタを構成し、最後に統一時間同期サーバを構成します.
Master:192.168.6.102(kubernetes-master) 
Node1:192.168.6.104(kubernetes-node1)
Node2:192.168.6.105(kubernetes-node2)
システムバージョン:CentOS Linux release 7.5.1804(Core)
Dockerバージョン:docker-ce-17.03.0
Kubernetesバージョン:1.12.0
配備方法:Kubeadm
SELinuxを閉じ、ファイアウォールルールをクリア
Docker配備
注:すべてのノードを配置する必要があります
インストールパッケージのダウンロード
cd /usr/local/src/
wget https://mirrors.aliyun.com/docker-ce/linux/centos/7/x86_64/stable/Packages/docker-ce-17.03.0.ce-1.el7.centos.x86_64.rpm
wget https://mirrors.aliyun.com/docker-ce/linux/centos/7/x86_64/stable/Packages/docker-ce-selinux-17.03.0.ce-1.el7.centos.noarch.rpm

インストール
yum -y install docker-ce-17.03.0.ce-1.el7.centos.x86_64.rpm docker-ce-selinux-17.03.0.ce-1.el7.centos.noarch.rpm

Dockerを起動し、POSTを設定します.
systemctl start docker && systemctl enable docker

専用のアリクラウドDocker公式ミラーウェアハウスアクセラレータを構成するには、まずアリクラウドアカウントを登録し、「コンテナミラーサービス」に入ってミラーアクセラレータを見つける必要があります.公式ドキュメントの説明に従って構成すればいいです.
Masterノードの配備
構成yumプロファイルの追加
[Kubernetes]
name=Kubernetes repo
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
enable=0

インストールソフトウェア:クラスタの初期化前に起動することはできません.その後、クラスタの初期化時に自動的に起動しますが、起動自起動に設定する必要があります.そうしないと、初期化時に警告が表示されます.
yum install kubeadm kubectl
systemctl enable kubelet

必要なミラーをダウンロード
kubeadm config images pull

注意:デフォルトでは、このサイトは国内ではダウンロードできません.うまくインストールできるように、壁の外のサーバを使用してDockerを配置し、kubeadmをインストールし、このコマンドを実行してミラーをローカルにダウンロードし、壁にパッケージしてコピーすることが望ましいです.
クラスタ初期化環境の準備
swapoff -a
echo "net.bridge.bridge-nf-call-iptables = 1" >> /etc/sysctl.conf

一時的に交換パーティションを閉じる必要があります.そうしないと、初期化時にエラーが発生します.fstabファイルで交換パーティションの行を永久に注釈すればいいです.
IPv 4透明ブリッジを開くには、IPv 4を使用するため、net.bridge.bridge-nf-call-iptablesパラメータと、すなわち
Masterクラスタの初期化を開始
kubeadm init --pod-network-cidr=10.42.0.0/16 --service-cidr=10.8.0.0/16 --kubernetes-version=v1.12.0 --apiserver-advertise-address=0.0.0.0 --apiserver-bind-port=6443 --ignore-preflight-errors=Swap

--pod-network-cidr:                     Podセグメントを指定します.デフォルトは10.244.00/16です.
--service-cidr:                               サービス・セグメントを指定します.デフォルトは10.96.0.12です.
--kubernetes-version:                  kubernetesバージョンを指定します.異なる時間にインストールされるkubeadmバージョンは異なり、サポートされるデプロイメントのkubernetesバージョンも異なり、サポートされていない場合はエラーメッセージが表示されます.
--apiserver-advertise-address:     apiserverリスニングアドレスを指定し、デフォルトリスニング0.0.0.0
--apiserver-bind-port:                  apiserverリスニングポートの指定、デフォルト6443
--ignore-preflight-errors:             指定されたエラーメッセージは無視されます.デフォルトではswapが開いているとエラーが表示されます.Swapが閉じている場合は指定しなくてもいいです.
正常にインストールされると、kubectlコンソールの構成とnodeノードの追加方法のプロンプトが表示されます.
[markmaster] Marking the node kubernetes-master as master by adding the label "node-role.kubernetes.io/master=''"
[markmaster] Marking the node kubernetes-master as master by adding the taints [node-role.kubernetes.io/master:NoSchedule]
[patchnode] Uploading the CRI Socket information "/var/run/dockershim.sock" to the Node API object "kubernetes-master" as an annotation
[bootstraptoken] using token: 9jefj3.czyghatvpi8mqamz
[bootstraptoken] configured RBAC rules to allow Node Bootstrap tokens to post CSRs in order for nodes to get long term certificate credentials
[bootstraptoken] configured RBAC rules to allow the csrapprover controller automatically approve CSRs from a Node Bootstrap Token
[bootstraptoken] configured RBAC rules to allow certificate rotation for all node client certificates in the cluster
[bootstraptoken] creating the "cluster-info" ConfigMap in the "kube-public" namespace
[addons] Applied essential addon: CoreDNS
[addons] Applied essential addon: kube-proxy

Your Kubernetes master 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 machines by running the following on each node
as root:

  kubeadm join 192.168.6.102:6443 --token 9jefj3.czyghatvpi8mqamz --discovery-token-ca-cert-hash sha256:4126634b062c39f2bc3ef3ba5aa717e95a54aa16889ccb820bdb548c961b8d97

メッセージ・ログが表示されます.次のようなエラー・プロンプトがある場合は
Container runtime network not ready: NetworkReady=false reason:NetworkPluginNotReady message:docker: network plugin is not ready: cni config uninitialized

「/var/lib/kubelet/kubeadm-flags.env」プロファイルを変更し、「--network-plugin=cni」を削除し、kubeletサービスを再起動します.
kubectlコンソールの構成
注意:一般ユーザーによる実行を推奨するプロンプトが表示されますので、sudo権限が必要です.ここで直接rootします.
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config

この場合、次のコマンドを使用してKubernetesの基本情報を表示できます.
kubectl get ns                              すべての名前空間を表示
kubectl get cs                              健康状態の確認
kubectl get nodes                       すべてのノード情報を表示
kubectl get pods                         すべてのpods情報を表示
flannelネットワークコンポーネントの導入
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
sed -i "/10.244/s/244/42/" kube-flannel.yml
kubectl apply -f kube-flannel.yml

導入前にpodネットワークが指定したネットワークを変更する必要があります.デフォルトの10.244.0.0/16を使用すると、変更する必要がなく、次のコマンドのインストールを直接実行できます.
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

注意:flannelを配備する時も自動的に関連するミラーをダウンロードして、先にymlファイルを開けてどのミラーが先にpullをダウンロードしてから配備を実行する必要があるかを見ることができます
Masterノードが正常に動作しているかどうかを確認します
健康状態の確認
$ kubectl get cs
NAME                 STATUS    MESSAGE              ERROR
controller-manager   Healthy   ok                   
scheduler            Healthy   ok                   
etcd-0               Healthy   {"health": "true"}

podsのステータスの表示
$ kubectl get pods -n kube-system
NAME                                        READY   STATUS    RESTARTS   AGE
coredns-576cbf47c7-h9js2                    1/1     Running   0          64m
coredns-576cbf47c7-zf9hd                    1/1     Running   0          64m
etcd-kubernetes-master                      1/1     Running   0          64m
kube-apiserver-kubernetes-master            1/1     Running   0          64m
kube-controller-manager-kubernetes-master   1/1     Running   0          64m
kube-flannel-ds-amd64-96988                 1/1     Running   0          61m
kube-proxy-h7xg2                            1/1     Running   0          64m
kube-scheduler-kubernetes-master            1/1     Running   0          64m

Nodesのステータスの表示
$ kubectl get nodes
NAME                STATUS   ROLES    AGE   VERSION
kubernetes-master   Ready    master   65m   v1.12.0

クラスタ・サービスのステータスの表示
kubectl get svc -n kube-system

ノードの配置
Masterノードと同様にyum repoファイルを構成する
ソフトウェアのインストール
yum install kubeadm kubelet

ノードをクラスタに追加
注意:swapを無効にし、透明なブリッジを開く必要があります.さらに、ノードは、k 8 s.gcr.io/kube-proxy quay.io/coreos/flannel k 8 s.gcr.io/pauseの3つのミラーを使用する必要があります.この3つのミラーは、プライマリノードsaveから降りて、次のコマンドを実行してクラスタに参加することができます.このコマンドは、プライマリノードの初期化が完了した後、最後に出力されるコマンドです.
kubeadm join 192.168.6.102:6443 --token 9jefj3.czyghatvpi8mqamz --discovery-token-ca-cert-hash sha256:4126634b062c39f2bc3ef3ba5aa717e95a54aa16889ccb820bdb548c961b8d97

参加に成功したら、次の情報を提示します.
[preflight] running pre-flight checks
    [WARNING RequiredIPVSKernelModulesAvailable]: the IPVS proxier will not be used, because the following required kernel modules are not loaded: [ip_vs_rr ip_vs_wrr ip_vs_sh ip_vs] or no builtin kernel ipvs support: map[ip_vs:{} ip_vs_rr:{} ip_vs_wrr:{} ip_vs_sh:{} nf_conntrack_ipv4:{}]
you can solve this problem with following methods:
 1. Run 'modprobe -- ' to load missing kernel modules;
2. Provide the missing builtin kernel ipvs support

    [WARNING Service-Kubelet]: kubelet service is not enabled, please run 'systemctl enable kubelet.service'
[discovery] Trying to connect to API Server "192.168.6.102:6443"
[discovery] Created cluster-info discovery client, requesting info from "https://192.168.6.102:6443"
[discovery] Requesting info from "https://192.168.6.102:6443" again to validate TLS against the pinned public key
[discovery] Cluster info signature and contents are valid and TLS certificate validates against pinned roots, will use API Server "192.168.6.102:6443"
[discovery] Successfully established connection with API Server "192.168.6.102:6443"
[kubelet] Downloading configuration for the kubelet from the "kubelet-config-1.12" ConfigMap in the kube-system namespace
[kubelet] Writing kubelet configuration to file "/var/lib/kubelet/config.yaml"
[kubelet] Writing kubelet environment file with flags to file "/var/lib/kubelet/kubeadm-flags.env"
[preflight] Activating the kubelet service
[tlsbootstrap] Waiting for the kubelet to perform the TLS Bootstrap...
[patchnode] Uploading the CRI Socket information "/var/run/dockershim.sock" to the Node API object "kubernetes-node1" as an annotation

This node has joined the cluster:
* Certificate signing request was sent to apiserver and a response was received.
* The Kubelet was informed of the new secure connection details.

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

Masterノードに戻ってNodeノードの状況を確認
Nodeステータスの表示
$ kubectl get nodes
NAME                STATUS   ROLES    AGE     VERSION
kubernetes-master   Ready    master   158m    v1.12.0
kubernetes-node1    Ready       3m55s   v1.12.0

Pod状況の表示
注:2つのflannelとproxyが実行され、それぞれプライマリノードとノードノードで実行されます.
$ kubectl get pods -n kube-system -o wide
NAME                                        READY   STATUS    RESTARTS   AGE    IP              NODE                NOMINATED NODE
coredns-576cbf47c7-h9js2                    1/1     Running   0          164m   172.17.0.3      kubernetes-master   
coredns-576cbf47c7-zf9hd                    1/1     Running   0          164m   172.17.0.2      kubernetes-master   
etcd-kubernetes-master                      1/1     Running   0          164m   192.168.6.102   kubernetes-master   
kube-apiserver-kubernetes-master            1/1     Running   0          164m   192.168.6.102   kubernetes-master   
kube-controller-manager-kubernetes-master   1/1     Running   0          164m   192.168.6.102   kubernetes-master   
kube-flannel-ds-amd64-96988                 1/1     Running   0          161m   192.168.6.102   kubernetes-master   
kube-flannel-ds-amd64-kpcpr                 1/1     Running   0          10m    192.168.6.104   kubernetes-node1    
kube-proxy-h7xg2                            1/1     Running   0          164m   192.168.6.102   kubernetes-master   
kube-proxy-pw5ck                            1/1     Running   0          10m    192.168.6.104   kubernetes-node1    
kube-scheduler-kubernetes-master            1/1     Running   0          164m   192.168.6.102   kubernetes-master   

これでノードの追加に成功し、このメソッドをループして他のノードに追加します.