k8s與Docker有啥關系


 

簡要介紹:

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

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

 

與傳統技術對比:

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

一、從虛擬化角度:

圖1:

    圖1是Docker容器與傳統虛擬化方式的不同之處,傳統的虛擬技術,在將物理硬件虛擬成多套硬件后,需要再每套硬件上都部署一個操作系統,接着在這些操作系統上運行相應的應用程序。而Docker容器內的應用程序進程直接運行在宿主機(真實物理機)的內核上,Docker引擎將一些各自獨立的應用程序和它們各自的依賴打包,相互獨立直接運行於未經虛擬化的宿主機硬件上,同時各個容器也沒有自己的內核,顯然比傳統虛擬機更輕便。

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

 

二、從部署角度

圖2:

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

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

    說白了,我們用kubernetes去管理Docker集群,即可以將Docker看成Kubernetes內部使用的低級別組件。另外,kubernetes不僅僅支持Docker,還支持Rocket,這是另一種容器技術。

https://www.cnblogs.com/haha-9527/p/10463466.html

 

k8s部署docker容器

 

環境:(docker ,k8s集群),繼續上次docker 啟動的java程序的鏡像為例(https://www.cnblogs.com/levcon/p/12442662.html)

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


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

k8s部署該鏡像

k8s創建命名空間及secret


創建命名空間cl-test,這里名字根據自己的命名規范自己定義,我這是測試用的

kubectl 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@ --docker-email=xxxx@163.com -n cl-test 控制台返回“secret/regcred created”表示創建成功 

創建demo服務的yaml文件,我們service和deployment放在一個yaml文件中


--- apiVersion: v1 kind: Service metadata:  name: demo-service  namespace: cl-test  labels:  app: demo-service spec:  type: NodePort  ports:  - port: 8701  targetPort: 8701  protocol: TCP  name: http  selector:  app: demo-pod --- apiVersion: apps/v1 kind: Deployment metadata:  name: demo-deployment  namespace: cl-test spec:  selector:  matchLabels:  app: demo-pod  replicas: 1  template:  metadata:  labels:  app: demo-pod  spec:  containers:  - name: demo-container  image: localhost:5000/demo-img:1.0 #本地私有鏡像庫的鏡像名稱+版本  ports:  - containerPort: 8701 

啟動


kubectl create -f demo.yaml 

查看pod


kubectl get pod -n cl-test 

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

https://www.cnblogs.com/levcon/p/12641376.html

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM