# 1. K8s安裝 - Ubuntu 20.04
###### tags: `Kubernetes`
## 一、安裝 Docker
#### 直接folllow下面的連結安裝即可!
https://docs.docker.com/engine/install/ubuntu/
或
下面兩行指令即可
```
sudo apt update
sudo apt install -y docker.io
#一開機即執行
sudo systemctl enable docker
```
<br/>
## 二、安裝 Kubernetes (kubelet, kubeadm, kubectl) on Ubuntu
#### 1. Install packages to allow apt to use a repository over HTTPS
```
sudo apt get update && sudo apt install -y apt-transport-https curl
```
#### 2. Enter the following to add a signing key:
Since you are downloading Kubernetes from a non-standard repository, it is essential to ensure that the software is authentic. This is done by adding a signing key.
```
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add
```
#### 3. Add Software Repositories
Kubernetes is not included in the default repositories. To add them, enter the following:
```
sudo apt-add-repository "deb http://apt.kubernetes.io/ kubernetes-xenial main"
```
#### 4. Install kubelet, kubeadm and kubectl
```
sudo apt update
sudo apt install -y kubelet kubeadm kubectl
#是否成功
kubeadm version
```
<br/>
## 三、Kubernetes 部屬
*node 的Kubernetes部屬只要做第六點就行 ( join )
#### 1. Disable the swap memory on each server
```
sudo swapoff -a
vim /etc/fstab
# 將 /swapfile 這一行註解起來(前方加上 '#' ) - 永久關閉
```
#### 2. 設定DNS - 修改 host file (同個cluster所有node都需更改host file)
```
hostnamectl set-hostname k8master
or
sudo vi /etc/hosts
## 加入指令
<IP-Address-of-node><tab><hostname-of-node>
-------
10.0.2.15 k8master
10.0.2.25 k8node1
10.0.2.35 k8node2
...
```

<br/>
#### 3. Initializing your master and create a cluster
```
sudo kubeadm init --pod-network-cidr=10.244.0.0/16
```
##### 將log的最後兩行指令存起來,之後node要加入此集群,執行此指令即可。例如:
```
kubeadm join 192.168.67.128:6443 --token 9gg19y.0i05a6asikxkdv41 \
--discovery-token-ca-cert-hash sha256:df730b9dc365367eca126dba28d64268e200fd0d81ebd0563668ede2cdd4eb7d
```
<br/>
> 如果遇到以下錯誤...執行這兩行指令就好了,[參考連結](https://blog.csdn.net/qq_43580215/article/details/125153959)。
> 
>
> 輸入以下指令
> ```
> sudo rm -rf /etc/containerd/config.toml
> systemctl restart containerd
> ```
<br/>
#### 4. 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
```
> #### Node isolation (Single Node)
> ##### 看網路有人說是啟動schedular,不清楚...
>
> ```
> $kubectl taint nodes --all node-role.kubernetes.io/master-
> ```
#### 5. Deploy Pod Network to Cluster
##### A Pod Network is a way to allow communication between different nodes in the cluster. This tutorial uses the flannel virtual network.
```
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
#Verify that everything is running and communicating:
kubectl get pods --all-namespaces
```
<br/>
> 如果有改自己的network,就要將flannel.yml下載下來並且修改裡面的網路
> 
<br/>
#### 6. Join Worker Node to Cluster
以下要在想要加入到某個cluster的node裡面執行:
```
kubeadm join --discovery-token abcdef.1234567890abcdef \
--discovery-token-ca-cert-hash sha256:1234..cdef 1.2.3.4:6443
```
<br/>
The system should display the worker nodes that you joined to the cluster.
```
kubectl get nodes
```
#### 7. We can use below command to debug:
```
journalctl -f -u kubelet
```
#### 8. Modify node role name:
```
$kubectl label node g8node1 node-role.kubernetes.io/worker=worker
node/g8node1 labeled
$ kubectl get no
NAME STATUS ROLES AGE VERSION
g8master Ready master 2d v1.18.8
g8node1 Ready worker 27m v1.18.5
```
#### 9. Renew Token
在master node打
```
kubeadm token create
```
查看token
```
kubeadm token list
```
獲取ca認證sha256編碼的hash值
```
openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'
```
將舊token更換為新token,hash值也換成新的,再重新join一次,即可成功加入拉~
## 參考連結:
1. [How to Install Kubernetes on Ubuntu 18.04](https://phoenixnap.com/kb/install-kubernetes-on-ubuntu)
2. https://ithelp.ithome.com.tw/articles/10235069
3. [Install a pod network add-on 排憂解難](https://ithelp.ithome.com.tw/articles/10209632)