---
# System prepended metadata

title: k8s

---

# k8s 

### docker
使用minikube需要指定driver(??driver扮演的角色??)，可以使用docker作為minikube的driver

ubuntu上安裝docker

    sudo apt-get install docker.io
將使用者(自己)加到docker group

    sudo usermod -aG docker $USER
重新登入(重開機)

#### 常用指令
* 檢查狀態
    `service docker status`
* 查看 Docker 的版本資訊
    `docker version`
* 尋找自己需要的 container 映像檔
    `docker search ubuntu`
* 下載 container 映像檔
    `docker pull ubuntu`
* 列出所有的 container 映像檔
    `docker images`
* 查看所有正在執行的 container
    `docker ps`
* 列出image
    `docker images`
* 刪除image
    `docker rmi <image ID>`
* 列出container
    `docker ps`
* 刪除container
    `docker rm <container ID>`
* 刪除無用image
    `docker image prune`
* 停止所有的 containers
    `docker stop $(docker ps -a -q)` 
* 刪除所有的 containers
    `docker rm $(docker ps -a -q)`
* 刪除所有的 images
    `docker rmi $(docker images -a -q)`
    
### minikube
Minikube是一套用來本地端開發使用的工具，能夠建立單節點Kubernetes cluster

開始minikube
    
     minikube start --driver=docker

結束minikube
    
    minikube stop
#### 常用指令
* 檢查版本
    `minikube version`
* 檢查狀態
    `minikube status`

### kubectl
kubectl是一套命令行工具用來控制Kubernetes cluster(有cluster才有辦法使用)

#### 常用指令

    kubectl get pods -A     #可以顯示更多資訊
    kubectl get pods 
    kubectl describe pods
    
## issue
* ImagePullBackOff

* http: server gave HTTP response to HTTPS client
修改/etc/docker/daemon.json，加入host:port 
```
{
  "live-restore": true,
  "group": "dockerroot",
  "insecure-registries": ["10.10.0.113:32000","10.10.0.113:31000"]
}
```
修改後要重啟docker
    `sudo service docker restart`

Ref: 
https://stackoverflow.com/questions/49674004/docker-repository-server-gave-http-response-to-https-client





### 場域一build成docker image並跑起來
1. 撰寫Dockerfile (參考: https://ithelp.ithome.com.tw/articles/10192519)
在與app.js同一層的資料夾新增Dockerfile
```
FROM node:16.14.0                                    
ENV NODE_ENV=production
WORKDIR /app
COPY ["package.json", "package-lock.json*", "./"]
RUN npm install --production
COPY . .
EXPOSE 8001                                        //好像沒啥用
CMD npm start
```
2. [optional] 撰寫.dockerignore 
```
node_modules
```
3. 建立docker image
```
sudo docker build --tag scenario1 .
```
4. 修改image tag
為了要上傳到docker hub因此需要將tag修改成與hub上相同的namespae
```
sudo docker tag scenario1 tmchen30/scenario1
```
5. 上傳到docker hub
在本地端登入docker hub後 (docker login)上傳就完成了
```
sudo docker push tmchen30/scenario1
```
6. 測試
因為有放在docker hub 而且設為公開，所以可以直接使用docker pull取得image
```
docker pull tmchen30/scenario1
```
將服務跑起來( port為3000 )
```
docker run -it -p 3000:3000 tmchen30/scenario1
```


# kubeadm

重置
1. kubeadm reset
2. 刪除資料夾 .kube

network setting
https://docs.tigera.io/calico/latest/getting-started/kubernetes/hardway/install-cni-plugin

