{"id":25930538,"url":"https://github.com/dszortyka/k8s-cluster-node-deploy","last_synced_at":"2025-10-09T02:09:10.291Z","repository":{"id":191241581,"uuid":"214419258","full_name":"dszortyka/k8s-cluster-node-deploy","owner":"dszortyka","description":"Some yaml files that can be used to install a kubernetes cluster and few other things.","archived":false,"fork":false,"pushed_at":"2019-10-29T13:29:45.000Z","size":35,"stargazers_count":0,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-10-09T02:03:10.438Z","etag":null,"topics":["cluster-node","k8s","kubernetes-cluster","playbooks"],"latest_commit_sha":null,"homepage":"","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/dszortyka.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2019-10-11T11:30:37.000Z","updated_at":"2019-10-29T13:29:47.000Z","dependencies_parsed_at":"2023-08-29T00:45:18.507Z","dependency_job_id":null,"html_url":"https://github.com/dszortyka/k8s-cluster-node-deploy","commit_stats":null,"previous_names":["dszortyka/k8s-cluster-node-deploy"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/dszortyka/k8s-cluster-node-deploy","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dszortyka%2Fk8s-cluster-node-deploy","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dszortyka%2Fk8s-cluster-node-deploy/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dszortyka%2Fk8s-cluster-node-deploy/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dszortyka%2Fk8s-cluster-node-deploy/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dszortyka","download_url":"https://codeload.github.com/dszortyka/k8s-cluster-node-deploy/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dszortyka%2Fk8s-cluster-node-deploy/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279000774,"owners_count":26082906,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-09T02:00:07.460Z","response_time":59,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cluster-node","k8s","kubernetes-cluster","playbooks"],"created_at":"2025-03-03T23:21:30.124Z","updated_at":"2025-10-09T02:09:10.274Z","avatar_url":"https://github.com/dszortyka.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"# k8s-cluster-node-deploy\nA couple of playbooks created for learning purposes and deploy a functional kubernete cluster with an additional node.\n\nMain Playbooks:\n\nansible-playbook -i \u003cinventory_file\u003e playbooks/k8s/\u003cplaybook_name\u003e\nansible-playbook -i cicd_hosts.yaml playbooks/k8s/deploy_all.yaml\n\n- deploy_all.yaml: Deploys a Cluster + Node + Calico Network + Kubernetes Dashboard\n\n- deploy_cluster.yaml: Deploys a cluster only.\n\n- deploy_network.yaml: Deploys the network plugin. It can be configured to flannel instead of calico.\n\n- deploy_node.yaml: Deploys a node.\n\n\nOther files:\n\n- base.yaml: Base packages, docker, kube* packages and OS configuration required by cluster and nodes.\n\n- install_k8_cluster.yaml: Contains the commands to deploy the cluster\n\n- install_k8_node.yaml: Contains the commands to join the node in the cluster\n\n- install_network_plugin.yaml: Single task related to plugin installation\n\n- cicd_inventory.yaml: Regular ansible inventory file. It has to be modified as per your landscape.\n\n\n\nNotice:\n- With \"base.yaml\", in the first task, there are 2 variables used in file 'install_k8_cluster.yaml'. They will define API Server IP and POD Network CIDR, required by network plugin during kubeadm init.\n\n-- set_fact: apiserver_advertise_address=\"10.0.0.98\"\n\n-- set_fact: pod_network_cidr=\"192.168.0.0/16\"\n\n- With \"deploy_all\", there is a shell script once cluster and network plugin are deploys, this shell script wait until all PODs are with 'Running' status before moving forward and join the node. \n\n```\n    - name: Awaiting all PODs to start\n      #script: sh check_awaiting_solution.sh\n      shell:\n       cmd: |\n        echo \"Get total PODs and wait until all of them are in Running state to move forward\"\n        TOT=`kubectl get pods --all-namespaces|awk '{print $4}'|wc -l`\n        COUNT_RUNNING=`kubectl get pods --all-namespaces|awk '{print $4}'|grep Running|wc -l`\n        echo \"Total PODs: $TOT\"\n        echo \"Total running pods: $COUNT_RUNNING\"\n        let DIFF=\"$(($TOT)) - $(($COUNT_RUNNING))\"\n        sleep 40\n        while [  $(($DIFF)) -gt 1 ]; do\n          sleep 20\n          TOT=`kubectl get pods --all-namespaces|awk '{print $4}'|wc -l`\n          COUNT_RUNNING=`kubectl get pods --all-namespaces|awk '{print $4}'|grep Running|wc -l`\n          let DIFF=\"$(($TOT)) - $(($COUNT_RUNNING))\"\n          echo \"Total PODs : $COUNT_RUNNING\"\n          echo \"Pending to initiate: $DIFF\"\n        done\n        echo \"All PODs are running\"\n```\n\n\n# Hosts inventory\n\n```\n[cluster]\nkclustert.home.net\n\n[nodes]\nknode2.home.net\n```\n\n# Install Cluster+Node\n```\nDaniels-MacBook-Pro:kube daniel$ ansible-playbook -i cicd_hosts.yaml playbooks/k8s/deploy_all.yaml \n\nPLAY [cluster] *********************************************************\n\nTASK [Gathering Facts] *********************************************************\nok: [kclustert.home.net]\n\nTASK [Define GLOBAL Variables] *********************************************************\nchanged: [kclustert.home.net]\n\nTASK [set_fact] *********************************************************\nok: [kclustert.home.net]\n\nTASK [set_fact] *********************************************************\nok: [kclustert.home.net]\n\nTASK [Define utf-8 codepage]*********************************************************\nchanged: [kclustert.home.net]\n...\n...\nTASK [debug] *********************************************************\nok: [kclustert.home.net] =\u003e {\n    \"msg\": \"[init] Using Kubernetes version: v1.16.1\\n[preflight] Running pre-flight checks\\n[preflight] Pulling images required for setting up a Kubernetes cluster\\n[preflight] This might take a minute or two, depending on the speed of your internet connection\\n[preflight] You can also perform this action in beforehand using 'kubeadm config images pull'\\n[kubelet-start] Writing kubelet environment file with flags to file \\\"/var/lib/kubelet/kubeadm-flags.env\\\"\\n[kubelet-start] Writing kubelet configuration to file \\\"/var/lib/kubelet/config.yaml\\\"\\n[kubelet-start] Activating the kubelet service\\n[certs] Using certificateDir folder \\\"/etc/kubernetes/pki\\\"\\n[certs] Generating \\\"ca\\\" certificate and key\\n[certs] Generating \\\"apiserver\\\" certificate and key\\n[certs] apiserver serving cert is signed for DNS names [kclustert.home.net kubernetes kubernetes.default kubernetes.default.svc kubernetes.default.svc.cluster.local] and IPs [10.96.0.1 10.0.0.98]\\n[certs] Generating \\\"apiserver-kubelet-client\\\" certificate and key\\n[certs] Generating \\\"front-proxy-ca\\\" certificate and key\\n[certs] Generating \\\"front-proxy-client\\\" certificate and key\\n[certs] Generating \\\"etcd/ca\\\" certificate and key\\n[certs] Generating \\\"etcd/server\\\" certificate and key\\n[certs] etcd/server serving cert is signed for DNS names [kclustert.home.net localhost] and IPs [10.0.0.98 127.0.0.1 ::1]\\n[certs] Generating \\\"etcd/peer\\\" certificate and key\\n[certs] etcd/peer serving cert is signed for DNS names [kclustert.home.net localhost] and IPs [10.0.0.98 127.0.0.1 ::1]\\n[certs] Generating \\\"etcd/healthcheck-client\\\" certificate and key\\n[certs] Generating \\\"apiserver-etcd-client\\\" certificate and key\\n[certs] Generating \\\"sa\\\" key and public key\\n[kubeconfig] Using kubeconfig folder \\\"/etc/kubernetes\\\"\\n[kubeconfig] Writing \\\"admin.conf\\\" kubeconfig file\\n[kubeconfig] Writing \\\"kubelet.conf\\\" kubeconfig file\\n[kubeconfig] Writing \\\"controller-manager.conf\\\" kubeconfig file\\n[kubeconfig] Writing \\\"scheduler.conf\\\" kubeconfig file\\n[control-plane] Using manifest folder \\\"/etc/kubernetes/manifests\\\"\\n[control-plane] Creating static Pod manifest for \\\"kube-apiserver\\\"\\n[control-plane] Creating static Pod manifest for \\\"kube-controller-manager\\\"\\n[control-plane] Creating static Pod manifest for \\\"kube-scheduler\\\"\\n[etcd] Creating static Pod manifest for local etcd in \\\"/etc/kubernetes/manifests\\\"\\n[wait-control-plane] Waiting for the kubelet to boot up the control plane as static Pods from directory \\\"/etc/kubernetes/manifests\\\". This can take up to 4m0s\\n[apiclient] All control plane components are healthy after 34.004607 seconds\\n[upload-config] Storing the configuration used in ConfigMap \\\"kubeadm-config\\\" in the \\\"kube-system\\\" Namespace\\n[kubelet] Creating a ConfigMap \\\"kubelet-config-1.16\\\" in namespace kube-system with the configuration for the kubelets in the cluster\\n[upload-certs] Skipping phase. Please see --upload-certs\\n[mark-control-plane] Marking the node kclustert.home.net as control-plane by adding the label \\\"node-role.kubernetes.io/master=''\\\"\\n[mark-control-plane] Marking the node kclustert.home.net as control-plane by adding the taints [node-role.kubernetes.io/master:NoSchedule]\\n[bootstrap-token] Using token: yer1c6.3g0jps020b58t39q\\n[bootstrap-token] Configuring bootstrap tokens, cluster-info ConfigMap, RBAC Roles\\n[bootstrap-token] configured RBAC rules to allow Node Bootstrap tokens to post CSRs in order for nodes to get long term certificate credentials\\n[bootstrap-token] configured RBAC rules to allow the csrapprover controller automatically approve CSRs from a Node Bootstrap Token\\n[bootstrap-token] configured RBAC rules to allow certificate rotation for all node client certificates in the cluster\\n[bootstrap-token] Creating the \\\"cluster-info\\\" ConfigMap in the \\\"kube-public\\\" namespace\\n[addons] Applied essential addon: CoreDNS\\n[addons] Applied essential addon: kube-proxy\\n\\nYour Kubernetes control-plane has initialized successfully!\\n\\nTo start using your cluster, you need to run the following as a regular user:\\n\\n  mkdir -p $HOME/.kube\\n  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config\\n  sudo chown $(id -u):$(id -g) $HOME/.kube/config\\n\\nYou should now deploy a pod network to the cluster.\\nRun \\\"kubectl apply -f [podnetwork].yaml\\\" with one of the options listed at:\\n  https://kubernetes.io/docs/concepts/cluster-administration/addons/\\n\\nThen you can join any number of worker nodes by running the following on each as root:\\n\\nkubeadm join 10.0.0.98:6443 --token yer1c6.3g0jps020b58t39q \\\\\\n    --discovery-token-ca-cert-hash sha256:442900d0706efc3c62a5d5d57a58e270ebe24d75cbb8774f537654ca120e33eb \"\n}\n...\n...\nTASK [debug] *********************************************************\nok: [knode2.home.net] =\u003e {\n    \"msg\": {\n        \"changed\": true, \n        \"cmd\": \"kubeadm join 10.0.0.98:6443 --token 9th6ul.s0jet2tqmme84j93     --discovery-token-ca-cert-hash sha256:442900d0706efc3c62a5d5d57a58e270ebe24d75cbb8774f537654ca120e33eb \", \n        \"delta\": \"0:00:22.303194\", \n        \"end\": \"2019-10-11 17:43:09.595894\", \n        \"failed\": false, \n        \"rc\": 0, \n        \"start\": \"2019-10-11 17:42:47.292700\", \n        \"stderr\": \"\\t[WARNING SystemVerification]: this Docker version is not on the list of validated versions: 19.03.3. Latest validated version: 18.09\", \n        \"stderr_lines\": [\n            \"\\t[WARNING SystemVerification]: this Docker version is not on the list of validated versions: 19.03.3. Latest validated version: 18.09\"\n        ], \n        \"stdout\": \"[preflight] Running pre-flight checks\\n[preflight] Reading configuration from the cluster...\\n[preflight] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -oyaml'\\n[kubelet-start] Downloading configuration for the kubelet from the \\\"kubelet-config-1.16\\\" ConfigMap in the kube-system namespace\\n[kubelet-start] Writing kubelet configuration to file \\\"/var/lib/kubelet/config.yaml\\\"\\n[kubelet-start] Writing kubelet environment file with flags to file \\\"/var/lib/kubelet/kubeadm-flags.env\\\"\\n[kubelet-start] Activating the kubelet service\\n[kubelet-start] Waiting for the kubelet to perform the TLS Bootstrap...\\n\\nThis node has joined the cluster:\\n* Certificate signing request was sent to apiserver and a response was received.\\n* The Kubelet was informed of the new secure connection details.\\n\\nRun 'kubectl get nodes' on the control-plane to see this node join the cluster.\", \n        \"stdout_lines\": [\n            \"[preflight] Running pre-flight checks\", \n            \"[preflight] Reading configuration from the cluster...\", \n            \"[preflight] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -oyaml'\", \n            \"[kubelet-start] Downloading configuration for the kubelet from the \\\"kubelet-config-1.16\\\" ConfigMap in the kube-system namespace\", \n            \"[kubelet-start] Writing kubelet configuration to file \\\"/var/lib/kubelet/config.yaml\\\"\", \n            \"[kubelet-start] Writing kubelet environment file with flags to file \\\"/var/lib/kubelet/kubeadm-flags.env\\\"\", \n            \"[kubelet-start] Activating the kubelet service\", \n            \"[kubelet-start] Waiting for the kubelet to perform the TLS Bootstrap...\", \n            \"\", \n            \"This node has joined the cluster:\", \n            \"* Certificate signing request was sent to apiserver and a response was received.\", \n            \"* The Kubelet was informed of the new secure connection details.\", \n            \"\", \n            \"Run 'kubectl get nodes' on the control-plane to see this node join the cluster.\"\n        ]\n    }\n}\n\nPLAY RECAP *********************************************************\nkclustert.home.net         : ok=40   changed=32   unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   \nknode2.home.net            : ok=33   changed=27   unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   \n```\n\n# Install Cluster\n\n```\nDaniels-MacBook-Pro:kube daniel$ ansible-playbook -i cicd_hosts.yaml playbooks/k8s/deploy_cluster.yaml \n\nPLAY [cluster] *********************************************************\n\nTASK [Gathering Facts] *********************************************************\nok: [kclustert.home.net]\n\nTASK [Define GLOBAL Variables] *********************************************************\nchanged: [kclustert.home.net]\n...\n...\nTASK [debug] *****************************************************************************************************************************************************************************************************************************************************************\nok: [kclustert.home.net] =\u003e {\n    \"msg\": \"[init] Using Kubernetes version: v1.16.1\\n[preflight] Running pre-flight checks\\n[preflight] Pulling images required for setting up a Kubernetes cluster\\n[preflight] This might take a minute or two, depending on the speed of your internet connection\\n[preflight] You can also perform this action in beforehand using 'kubeadm config images pull'\\n[kubelet-start] Writing kubelet environment file with flags to file \\\"/var/lib/kubelet/kubeadm-flags.env\\\"\\n[kubelet-start] Writing kubelet configuration to file \\\"/var/lib/kubelet/config.yaml\\\"\\n[kubelet-start] Activating the kubelet service\\n[certs] Using certificateDir folder \\\"/etc/kubernetes/pki\\\"\\n[certs] Generating \\\"ca\\\" certificate and key\\n[certs] Generating \\\"apiserver\\\" certificate and key\\n[certs] apiserver serving cert is signed for DNS names [kclustert.home.net kubernetes kubernetes.default kubernetes.default.svc kubernetes.default.svc.cluster.local] and IPs [10.96.0.1 10.0.0.98]\\n[certs] Generating \\\"apiserver-kubelet-client\\\" certificate and key\\n[certs] Generating \\\"front-proxy-ca\\\" certificate and key\\n[certs] Generating \\\"front-proxy-client\\\" certificate and key\\n[certs] Generating \\\"etcd/ca\\\" certificate and key\\n[certs] Generating \\\"etcd/server\\\" certificate and key\\n[certs] etcd/server serving cert is signed for DNS names [kclustert.home.net localhost] and IPs [10.0.0.98 127.0.0.1 ::1]\\n[certs] Generating \\\"etcd/peer\\\" certificate and key\\n[certs] etcd/peer serving cert is signed for DNS names [kclustert.home.net localhost] and IPs [10.0.0.98 127.0.0.1 ::1]\\n[certs] Generating \\\"etcd/healthcheck-client\\\" certificate and key\\n[certs] Generating \\\"apiserver-etcd-client\\\" certificate and key\\n[certs] Generating \\\"sa\\\" key and public key\\n[kubeconfig] Using kubeconfig folder \\\"/etc/kubernetes\\\"\\n[kubeconfig] Writing \\\"admin.conf\\\" kubeconfig file\\n[kubeconfig] Writing \\\"kubelet.conf\\\" kubeconfig file\\n[kubeconfig] Writing \\\"controller-manager.conf\\\" kubeconfig file\\n[kubeconfig] Writing \\\"scheduler.conf\\\" kubeconfig file\\n[control-plane] Using manifest folder \\\"/etc/kubernetes/manifests\\\"\\n[control-plane] Creating static Pod manifest for \\\"kube-apiserver\\\"\\n[control-plane] Creating static Pod manifest for \\\"kube-controller-manager\\\"\\n[control-plane] Creating static Pod manifest for \\\"kube-scheduler\\\"\\n[etcd] Creating static Pod manifest for local etcd in \\\"/etc/kubernetes/manifests\\\"\\n[wait-control-plane] Waiting for the kubelet to boot up the control plane as static Pods from directory \\\"/etc/kubernetes/manifests\\\". This can take up to 4m0s\\n[apiclient] All control plane components are healthy after 35.503706 seconds\\n[upload-config] Storing the configuration used in ConfigMap \\\"kubeadm-config\\\" in the \\\"kube-system\\\" Namespace\\n[kubelet] Creating a ConfigMap \\\"kubelet-config-1.16\\\" in namespace kube-system with the configuration for the kubelets in the cluster\\n[upload-certs] Skipping phase. Please see --upload-certs\\n[mark-control-plane] Marking the node kclustert.home.net as control-plane by adding the label \\\"node-role.kubernetes.io/master=''\\\"\\n[mark-control-plane] Marking the node kclustert.home.net as control-plane by adding the taints [node-role.kubernetes.io/master:NoSchedule]\\n[bootstrap-token] Using token: myicac.8oepry1i37mh5m55\\n[bootstrap-token] Configuring bootstrap tokens, cluster-info ConfigMap, RBAC Roles\\n[bootstrap-token] configured RBAC rules to allow Node Bootstrap tokens to post CSRs in order for nodes to get long term certificate credentials\\n[bootstrap-token] configured RBAC rules to allow the csrapprover controller automatically approve CSRs from a Node Bootstrap Token\\n[bootstrap-token] configured RBAC rules to allow certificate rotation for all node client certificates in the cluster\\n[bootstrap-token] Creating the \\\"cluster-info\\\" ConfigMap in the \\\"kube-public\\\" namespace\\n[addons] Applied essential addon: CoreDNS\\n[addons] Applied essential addon: kube-proxy\\n\\nYour Kubernetes control-plane has initialized successfully!\\n\\nTo start using your cluster, you need to run the following as a regular user:\\n\\n  mkdir -p $HOME/.kube\\n  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config\\n  sudo chown $(id -u):$(id -g) $HOME/.kube/config\\n\\nYou should now deploy a pod network to the cluster.\\nRun \\\"kubectl apply -f [podnetwork].yaml\\\" with one of the options listed at:\\n  https://kubernetes.io/docs/concepts/cluster-administration/addons/\\n\\nThen you can join any number of worker nodes by running the following on each as root:\\n\\nkubeadm join 10.0.0.98:6443 --token myicac.8oepry1i37mh5m55 \\\\\\n    --discovery-token-ca-cert-hash sha256:f5855ee6907178e423e8dcd3e47b4ac5d78868ee3271f6151c33a713119902ed \"\n}\n\nTASK [Mkdir $HOME/.kube] *********************************************************\n [WARNING]: Consider using the file module with state=absent rather than running 'rm'.  If you need to use command because file is insufficient you can add 'warn: false' to this command task or set 'command_warnings=False' in ansible.cfg to get rid of this message.\n\nchanged: [kclustert.home.net]\n\nTASK [Copy kube config to users home] *********************************************************\nchanged: [kclustert.home.net]\n\nTASK [Apply correct permissions] *********************************************************\nchanged: [kclustert.home.net]\n\nPLAY RECAP *********************************************************\nkclustert.home.net         : ok=34   changed=20   unreachable=0    failed=0    skipped=0    rescued=0    ignored=0\n\n```\n\n# Install Network\n\n```\nDaniels-MacBook-Pro:kube daniel$ ansible-playbook -i cicd_hosts.yaml playbooks/k8s/deploy_network.yaml \n\nPLAY [cluster] *********************************************************\n\nTASK [Gathering Facts] *********************************************************\nok: [kclustert.home.net]\n\nTASK [Install Calico Network] *********************************************************\nchanged: [kclustert.home.net]\n\nPLAY RECAP *********************************************************\nkclustert.home.net         : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   \n\n```\n\n# Install Node\n\n```\nDaniels-MacBook-Pro:kube daniel$ ansible-playbook -i cicd_hosts.yaml playbooks/k8s/deploy_node.yaml \n\nPLAY [cluster] *********************************************************\n\nTASK [Gathering Facts] *********************************************************\nok: [kclustert.home.net]\n\nTASK [Get the command information to later join the node] *********************************************************\nchanged: [kclustert.home.net]\n\nTASK [set_fact] *********************************************************\nok: [kclustert.home.net]\n\nTASK [debug] *********************************************************\nok: [kclustert.home.net] =\u003e {\n    \"msg\": \"kubeadm join 10.0.0.98:6443 --token 3oc898.6kmp2i7jq82wo6z2     --discovery-token-ca-cert-hash sha256:f5855ee6907178e423e8dcd3e47b4ac5d78868ee3271f6151c33a713119902ed \"\n}\n...\n...\nTASK [Join the Node server into the K8 cluster] *********************************************************\nchanged: [knode2.home.net]\n\nTASK [debug] *********************************************************\nok: [knode2.home.net] =\u003e {\n    \"msg\": {\n        \"changed\": true, \n        \"cmd\": \"kubeadm join 10.0.0.98:6443 --token 3oc898.6kmp2i7jq82wo6z2     --discovery-token-ca-cert-hash sha256:f5855ee6907178e423e8dcd3e47b4ac5d78868ee3271f6151c33a713119902ed \", \n        \"delta\": \"0:00:22.363906\", \n        \"end\": \"2019-10-11 19:35:23.198114\", \n        \"failed\": false, \n        \"rc\": 0, \n        \"start\": \"2019-10-11 19:35:00.834208\", \n        \"stderr\": \"\\t[WARNING SystemVerification]: this Docker version is not on the list of validated versions: 19.03.3. Latest validated version: 18.09\", \n        \"stderr_lines\": [\n            \"\\t[WARNING SystemVerification]: this Docker version is not on the list of validated versions: 19.03.3. Latest validated version: 18.09\"\n        ], \n        \"stdout\": \"[preflight] Running pre-flight checks\\n[preflight] Reading configuration from the cluster...\\n[preflight] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -oyaml'\\n[kubelet-start] Downloading configuration for the kubelet from the \\\"kubelet-config-1.16\\\" ConfigMap in the kube-system namespace\\n[kubelet-start] Writing kubelet configuration to file \\\"/var/lib/kubelet/config.yaml\\\"\\n[kubelet-start] Writing kubelet environment file with flags to file \\\"/var/lib/kubelet/kubeadm-flags.env\\\"\\n[kubelet-start] Activating the kubelet service\\n[kubelet-start] Waiting for the kubelet to perform the TLS Bootstrap...\\n\\nThis node has joined the cluster:\\n* Certificate signing request was sent to apiserver and a response was received.\\n* The Kubelet was informed of the new secure connection details.\\n\\nRun 'kubectl get nodes' on the control-plane to see this node join the cluster.\", \n        \"stdout_lines\": [\n            \"[preflight] Running pre-flight checks\", \n            \"[preflight] Reading configuration from the cluster...\", \n            \"[preflight] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -oyaml'\", \n            \"[kubelet-start] Downloading configuration for the kubelet from the \\\"kubelet-config-1.16\\\" ConfigMap in the kube-system namespace\", \n            \"[kubelet-start] Writing kubelet configuration to file \\\"/var/lib/kubelet/config.yaml\\\"\", \n            \"[kubelet-start] Writing kubelet environment file with flags to file \\\"/var/lib/kubelet/kubeadm-flags.env\\\"\", \n            \"[kubelet-start] Activating the kubelet service\", \n            \"[kubelet-start] Waiting for the kubelet to perform the TLS Bootstrap...\", \n            \"\", \n            \"This node has joined the cluster:\", \n            \"* Certificate signing request was sent to apiserver and a response was received.\", \n            \"* The Kubelet was informed of the new secure connection details.\", \n            \"\", \n            \"Run 'kubectl get nodes' on the control-plane to see this node join the cluster.\"\n        ]\n    }\n}\n\nPLAY RECAP *********************************************************\nkclustert.home.net         : ok=4    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   \nknode2.home.net            : ok=31   changed=26   unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   \n\n\n```\n\n# Credits\nA lot of this work has been inspired by https://github.com/geerlingguy/ansible-role-kubernetes (from Jeff Geerling  https://github.com/geerlingguy), those are way more elegant and sophysticated scripts that delivers a running cluster.  \n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdszortyka%2Fk8s-cluster-node-deploy","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdszortyka%2Fk8s-cluster-node-deploy","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdszortyka%2Fk8s-cluster-node-deploy/lists"}