k8s in action 閱讀紀錄02 - 使用k8s與docker

2021-08-21
4分鐘閱讀
k8s

讀過k8s in action的每章稍微整理,系列文章可以 按這裡

關鍵字:使用docker,使用k8s,安裝kind,pod是什麼

使用docker

跳稍微快一點,就大概講個感覺就好

運行容器

最簡單的就像這樣,以下指令會下載一個叫busybox的image,在電腦上經由docker開成container,執行echo "Hello world"指令

docker run busybox echo "Hello world"

如上所述,image的名字是busybox,通常會有版本的tag

image_name:tag

image VS container

  • image指從docker上拉下來別人做好的,本機中就使用docker build做出來
  • container指使用image開出來的容器服務

Dockerfile

image怎做出來,就由dockerfile定義,長這樣,詳細定義參考 這裡 ,建完個dockerfile,就使用docker build -t name .做出image

FROM node:7
ADD app.js /app.js
ENTRYPOINT ["node","app.js"]

鏡像分層

dockerfile中一條條指令其實就是一層,在下載image的時候,會看到一條條在那跑,就是因為是一層層建起來的,如果兩個image的前幾層都一樣,那就可以被重複使用

02

常用指令

  • 看哪些container在跑: docker container ls
  • 進到容器內部,也就是進到容器的shell中: docker container exec -it CONTAINER_NAME sh
    • -it 必要,有各自的功能,但詳細我不懂XD,以下抄原文
      • -i 確保標準輸入流保持開放,需要在shell中輸入命令
      • -t 分配一個偽終端
  • 停止container: docker container stop CONTAINER_NAME
  • 刪除container: docker container rm CONTAINER_NAME
  • 清理檔案,就如沒有用到的image,container,volume等可以清掉: docker system prune
    • --all 會清掉更多東西,如volume,指令上會提示

邊緣人自己一台電腦要用的話,用docker就真的很夠了,而且通常會搭配 docker-compose 用,心情好的時候來寫點docker-compose吧

使用k8s

配置cluster,用 Google Kubernetes Engine 等東西我就跳過了(因為我沒有。。。)

使用kind來練習

那我們還是想要有個模擬多cluster的k8s環境,這邊我找到了個 kind ,他能模擬出多集群環境

kind網站: https://kind.sigs.k8s.io/

安裝kind

要先安裝docker,kind安裝詳細可參考這裡 kind ,基本上就載個執行檔,套用yaml檔案而已

curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.11.1/kind-linux-amd64
chmod +x ./kind
mv ./kind /some-dir-in-your-PATH/kind

建立模擬的cluster

上面用好之後可以kind一下看看,有的話就套用以下yaml檔案,會模擬出3個節點,以kind create cluster --config create-cluster.yaml套用

# three node (two workers) cluster config
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
- role: worker
- role: worker

使用kubectl

安裝kubectl

就把kubectl想成他跟整個k8s互動就好,之後要用啥都用這指令做,安裝詳細參考 這裡 ,也是載個執行檔而已~~~

kubectl網站: https://kubernetes.io/zh/docs/tasks/tools/install-kubectl-linux/

curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl

自動補齊和alias

等等一堆指令都要打kubectl很麻煩,而且之後也想要tab自動補全,shell是使用bash的話,就抄下面貼到~/.bash_aliases就行了

alias k='kubectl'
source <(kubectl completion bash | sed s/kubectl/k/g)

kubectl簡化成k,且使用kubectl自動補全的source file,因為我們都用k了,source的kubectl全換成k

第一個k8s指令

搞了那麼多,終於可以k8s了,可用以下指令佈署第一個應用,下面啥東東不用管,反正之後也不會用這種方式開應用拉~

k run kubia --image=luksa/kubia --port=8080 --generator=run/v1

pod

pod就是k8s的一個基本單位,就有點像docker的container,但dimension在高一層!!,也就是說1個pod裡可以有多個container,這多個container需要相依為命才能運作,所以有些注意事項:

  • 同個pod裡的container一定跑在同個node上,也就是cluster有很多電腦,那同個pod的container會都在同個電腦上
  • 之前講說container會分離,是透過linux namespace來達成的,那pod裡的container互相怎麼分離呢?也是透過linux namespace拉,只是
    • docker container的linux namespace預設完全不同
    • pod裡的container的linux namespace預設有些相同,有些不同,我的感覺是藕斷絲連==,可以看 我這篇
  • k8s的厲害之處(我覺得)就是可以開很多個重複的pod出來,達到load balencer的功能!!!

k8s稍微看看指令

目前還沒講很多k8s的東西,所以就稍微記點指令就好,書講的比我列的還多,但後面都會出現,之後再講吧

  • k api-resources:跑出一堆東西,到最後會知道k8s所有的東東(網路,儲存空間,開port等等)都由這些定義的,之後慢慢來知道
  • k get pod:列出開的所有的pod,也可以get api-resources中所有的資源(k get service)
    • k get po -o yaml:輸出yaml格式

小結

  • 怎麼運行docker
  • 模擬k8s cluster的東西 - kind
  • 安裝kubectl
  • pod是什麼
author:   allmwh
commit:   7873556
comment:   k8s-ia-2-use-k8s-and-docker
lastmod:   2021-08-21 20:33:39
Avatar
allmwh 好油哦,配口水... 紀錄一些生活的事
comments powered by Disqus