Ubuntu 18.04
Sponsored Link

Kubernetes : Kubeadm : Workerノードの設定2018/10/22

Kubeadm をインストールして、マルチノード Kubernetes クラスターを構成します。
当例では以下のように 3台のホストを使用して設定します。
前提条件として、それぞれのノードの Hostname, MAC address, Product_uuid は一意である必要があります。
MAC address と Product_uuid は、通常の物理マシンや一般的な方法で作成した仮想マシンであれば、すでに一意となっているはずです。 Product_uuid は [dmidecode -s system-uuid] コマンドで確認できます。
           |                           |                          |
       eth0|              eth0|             eth0|
+----------+-----------+   +-----------+----------+   +-----------+----------+
|   [ dlp.srv.world ]  |   | [ node01.srv.world ] |   | [ node02.srv.world ] |
|      Master Node     |   |      Worker Node     |   |      Worker Node     |
+----------------------+   +----------------------+   +----------------------+

Worker ノードの設定を実施します。
[2] Master ノードで初期セットアップしたクラスターに Join します。
Join する際のコマンドは、初期セットアップのコマンド実行時の最後に表示された [kubeadm join ~] コマンドをそのままコピーして実行するのみです。
kubeadm join --token nvr822.tjn09e85qw3a3vuz --discovery-token-ca-cert-hash sha256:866f645d9ec0da07f778b3c4abc4427e9967845d71add3252fbd691b86c0a9a7

[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 ip_vs_rr ip_vs_wrr ip_vs_sh] 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 SystemVerification]: this Docker version is not on the list of validated versions: 17.12.1-ce. Latest validated version: 18.06
[discovery] Trying to connect to API Server ""
[discovery] Created cluster-info discovery client, requesting info from ""
[discovery] Requesting info from "" 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 ""
[discovery] Successfully established connection with API Server ""
[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 "node01.srv.world" 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.

# Successfully established connection ~ と表示されれば OK

[3] Master ノードでノード情報を確認しておきます。全て STATUS = Ready であれば OK です。
kubectl get nodes

NAME               STATUS   ROLES    AGE     VERSION
dlp.srv.world      Ready    master   12m     v1.12.1
node01.srv.world   Ready    <none>   6m59s   v1.12.1
node02.srv.world   Ready    <none>   2m20s   v1.12.1
[4] Pod をデプロイして動作確認しておきます。
kubectl create deployment test-nginx --image=nginx

deployment.apps "test-nginx" created
kubectl scale deployment test-nginx --replicas=3

deployment.extensions/test-nginx scaled
kubectl get pods -o wide

NAME                          READY   STATUS    RESTARTS   AGE   IP           NODE               NOMINATED NODE
test-nginx-677ccfd879-7pxdn   1/1     Running   0          14s   node02.srv.world   <none>
test-nginx-677ccfd879-hpvv5   1/1     Running   0          33s   node01.srv.world   <none>
test-nginx-677ccfd879-wjj7k   1/1     Running   0          14s   node01.srv.world   <none>
kubectl expose deployment test-nginx --port 80

service "test-nginx" exposed
kubectl describe service test-nginx

Name:              test-nginx
Namespace:         default
Labels:            app=test-nginx
Annotations:       <none>
Selector:          app=test-nginx
Type:              ClusterIP
Port:              <unset>  80/TCP
TargetPort:        80/TCP
Session Affinity:  None
Events:            <none>

<!DOCTYPE html>
<title>Welcome to nginx!</title>
<p><em>Thank you for using nginx.</em></p>