# 練習kubernetes的安裝與測試 ## 建立kubeadm <p> 參考<br> https://ithelp.ithome.com.tw/articles/10235069<br> &&<br> https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/ </p> ## 前置 <p> 準備兩台虛擬機,都是VMWare Ubuntu20.04,分別用來配置Control Plane、Node,至少2core、4G記憶體 </p> ## Control Plane & Node上皆須執行 ### step1.更新 repositpories <code>$ sudo su</code> <code>$ apt-get update</code> ### step2.關閉 swap space <code>$ swapoff -a</code> <code>$ vim /etc/fstab</code> 將 /swapfile 這一行註解起來(前方加上 '#' ) ### step3.修改 hostname <code>$ vim /etc/hostname</code> <code>k8master</code> <p>刪掉原本名稱,任取一個新的<br> EX:將ubuntu改為k8master,而Node改為k8worker<br> 重啟虛擬機,<code>hostname</code>即成功修改 </p> ### step4.設定DNS - 修改 host file <code>$ vim /etc/hosts</code> <p>加入:</p> <code>192.168.132.241 k8master</code> <code>192.168.132.173 k8worker</code> <p>原本的資料不需更改,只要新增就好</p> ![](https://i.imgur.com/LYANFlF.jpg) ### step5.安裝 ssh <code>$ apt-get install openssh-server</code> ### step6.安裝 Docker <code>$ apt-get update</code> <code>$ apt-get install -y docker.io</code> ### step7.建立 kubernetes 環境 <p> 由於需更新apt package,網路找到的教學文常常出現報錯:找不到資源包連結<br> 因此我去k8s的官方網站:<br>https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/<br> </p> ![](https://i.imgur.com/nAf961S.png) <div id="k8s-install-0" class="tab-pane show active" role="tabpanel" aria-labelledby="k8s-install-0"> <p></p><ol> <li> <p>Update the <code>apt</code> package index and install packages needed to use the Kubernetes <code>apt</code> repository:</p> <div class="highlight"><pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-shell" data-lang="shell">sudo apt-get update sudo apt-get install -y apt-transport-https ca-certificates curl </code></pre></div></li> <li> <p>Download the Google Cloud public signing key:</p> <div class="highlight"><pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-shell" data-lang="shell">sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg </code></pre></div></li> <li> <p>Add the Kubernetes <code>apt</code> repository:</p> <div class="highlight"><pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-shell" data-lang="shell"><span style="color:#a2f">echo</span> <span style="color:#b44">"deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main"</span> | sudo tee /etc/apt/sources.list.d/kubernetes.list </code></pre></div></li> <li> <p>Update <code>apt</code> package index, install kubelet, kubeadm and kubectl, and pin their version:</p> <div class="highlight"><pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-shell" data-lang="shell">sudo apt-get update sudo apt-get install -y kubelet kubeadm kubectl sudo apt-mark hold kubelet kubeadm kubectl </code></pre></div></li> </ol> </div> ## 只在Control Plane上執行 ### 初始化Control Plane <code>$ sudo kubeadm init --pod-network-cidr=10.244.0.0/16</code> ![](https://i.imgur.com/H8Bmwdp.jpg) <p> 依序輸入系統給的三個指令: </p> <pre><code class="language-bash= hljs">$ mkdir -p <span class="hljs-variable">$HOME</span>/.kube $ sudo cp -i /etc/kubernetes/admin.conf <span class="hljs-variable">$HOME</span>/.kube/config $ sudo chown $(id -u):$(id -g) <span class="hljs-variable">$HOME</span>/.kube/config </code></pre> <p> 將最後兩行指令存起來,之後k8worker要加入此集群,執行此指令即可 </p> <pre><code class="language-= hljs css"><span class="hljs-selector-tag">kubeadm</span> <span class="hljs-selector-tag">join</span> 192<span class="hljs-selector-class">.168</span><span class="hljs-selector-class">.216</span><span class="hljs-selector-class">.131</span><span class="hljs-selector-pseudo">:6443</span> <span class="hljs-selector-tag">--token</span> <span class="hljs-selector-tag">ra7nvg</span><span class="hljs-selector-class">.wkigjihyc4sy8xh3</span> \ <span class="hljs-selector-tag">--discovery-token-ca-cert-hash</span> <span class="hljs-selector-tag">sha256</span><span class="hljs-selector-pseudo">:323d12aaf45950ff6c453b6c54ffb158957269a0177f47006ec08d1b75df4228</span> </code></pre> ## 只在Node上執行 ### kubeadm join <p> 輸入剛剛得到的<code>$ kubeadm join 192.168.216.131:6443 --token</code>.... </p> ![](https://i.imgur.com/g0MzEnK.jpg) <p> 在Control Plane輸入指令<code>$ kubectl get nodes</code> </p> ![](https://i.imgur.com/PaTlWgq.jpg) <p> 看到k8worker已被加入,不過可以看到<code>STATUS</code>都是<code>NotReady</code>,因為還沒安裝<code>CNI</code> </p> ## 安裝CNI (Network Plugin) <p> 在Control Plane輸入指令<br> <pre><code class="language-= hljs css">$ kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')"</code></pre> </p> ![](https://i.imgur.com/ouAjoDd.png) <p> <code>$ kubectl get nodes</code>查看<code>STATUS</code> </p> ![](https://i.imgur.com/jlluS4B.png) <p> <code>$ kubectl label node k8worker node-role.kubernetes.io/worker=worker</code><br> 可為k8worker的<code>ROLES</code>命名,範例命名為<code>worker</code> </p>