天天看點

k8s與Docker有啥關系

簡要介紹:

    官方定義1:Docker是一個開源的應用容器引擎,開發者可以打包他們的應用及依賴到一個可移植的容器中,釋出到流行的Linux機器上,也可實作虛拟化。

    官方定義2:k8s是一個開源的容器叢集管理系統,可以實作容器叢集的自動化部署、自動擴縮容、維護等功能。

與傳統技術對比:

    接下來我們看兩張經典的圖:

一、從虛拟化角度:

圖1:

k8s與Docker有啥關系

    圖1是Docker容器與傳統虛拟化方式的不同之處,傳統的虛拟技術,在将實體硬體虛拟成多套硬體後,需要再每套硬體上都部署一個作業系統,接着在這些作業系統上運作相應的應用程式。而Docker容器内的應用程式程序直接運作在主控端(真實實體機)的核心上,Docker引擎将一些各自獨立的應用程式和它們各自的依賴打包,互相獨立直接運作于未經虛拟化的主控端硬體上,同時各個容器也沒有自己的核心,顯然比傳統虛拟機更輕便。

    每個叢集有多個節點,每個節點可建立多個容器,kuberbete就是管理這些應用程式所在的小運作環境(container)而生。

二、從部署角度

圖2:

k8s與Docker有啥關系

    注意,大家别把這幅圖與上面Docker的那張圖混淆了,圖1是從虛拟化角度,說明了為應用提供必要的運作環境所需要做的虛拟化操作(即:傳統:虛拟出的虛拟機裝作業系統、Docker:容器引擎管理下的容器)。

    而圖2是在這些具體運作環境上進行真實應用部署時的情況,傳統方式是将所有應用直接部署在同一個實體機器節點上,這樣每個App的依賴都是完全相同的,無法做到App之間隔離,當然,為了隔離,我們也可以通過建立虛拟機的方式來将App部署到其中(就像圖1上半部分那樣),但這樣太過繁重,故比虛拟機更輕便的Docker技術出現,現在我們通過部署Container容器的技術來部署應用,全部Container運作在容器引擎上即可。既然嫌棄虛拟機繁重,想用Docker,那好,你用吧,怎麼用呢?手動一個一個建立?當然不,故kubernetes技術便出現了,以kubernetes為代表的容器叢集管理系統,這時候就該上場表演了。

    說白了,我們用kubernetes去管理Docker叢集,即可以将Docker看成Kubernetes内部使用的低級别元件。另外,kubernetes不僅僅支援Docker,還支援Rocket,這是另一種容器技術。

k8s部署docker容器

目錄

  • ​​将制作的鏡像推送到docker的私有倉庫​​
  • ​​k8s部署該鏡像​​
  • ​​k8s建立命名空間及secret​​
  • ​​建立demo服務的yaml檔案,我們service和deployment放在一個yaml檔案中​​
  • ​​啟動​​
  • ​​檢視pod​​
環境:(docker ,k8s叢集),繼續上次docker 啟動的java程式的鏡像為例

将制作的鏡像推送到docker的私有倉庫

docker tag demo-img:latest localhost:5000/demo-img:1.0

docker push localhost:5000/demo-img:1.0
      
k8s與Docker有啥關系

k8s部署該鏡像

k8s建立命名空間及secret

create namespace cl-test

建立完ns後,我們要給這個ns建立secret

kubectl create secret docker-registry regcred --docker-server=your resroty ip:5000 --docker-username=root --docker-password=xxxx@ [email protected] -n cl-test

控制台傳回“secret/regcred created”表示建立成功
      

建立demo服務的yaml檔案,我們service和deployment放在一個yaml檔案中

---

apiVersion: v1
kind: Service
metadata:
demo-service
cl-test
demo-service
spec:
NodePort
8701
8701
TCP
http
demo-pod
---
apiVersion: apps/v1
kind: Deployment
metadata:
demo-deployment
cl-test
spec:
demo-pod
1
demo-pod
demo-container
localhost:5000/demo-img:1.0  #本地私有鏡像庫的鏡像名稱+版本
8701
      

啟動

create  -f demo.yaml
      

檢視pod

kubectl get pod -n cl-test
      
k8s與Docker有啥關系

pod日志檢視,正是我們之前java啟動時所展示的日志

k8s與Docker有啥關系

繼續閱讀