一文透徹理解docker以及k8s


k8s的出現解決了應用上雲的一大難題,企業中越來越多的微服務要求上雲
這里,通過一篇文章讓大家能夠透徹理解docker、k8s,並能夠在需要的時候有的放矢

一、docker

Docker 是一個開源的應用容器引擎,主要包含幾個概念:鏡像(Image),容器(Container),倉庫(Repository)。
三者的關系可以參考這張圖。其中,docker是運行容器的載體(可以對容器進行操作);容器通過鏡像創建;倉庫用來管理鏡像

docker build命令用來構建鏡像,一般通過創建Dockerfile文件構建。可以參考
1、dockerfile多階段編譯
2、dockerfile指令


參考這里就可以掌握基本用法
1、docker概念理解
2、docker基本用法


二、k8s

k8s(Kubernetes) 是用於自動部署,擴展和管理容器化應用程序的開源系統

2.1 k8s架構:

 

 

 

這張系統架構圖中,服務分為運行在工作節點上的服務組成集群級別控制板的服務

Kubernetes節點有運行應用容器必備的服務,而這些都是受Master的控制。

每次個節點上當然都要運行Docker。Docker來負責所有具體的映像下載和容器運行。

Kubernetes主要由以下幾個核心組件組成:

  • etcd保存了整個集群的狀態;
  • apiserver提供了資源操作的唯一入口,並提供認證、授權、訪問控制、API注冊和發現等機制;
  • controller manager負責維護集群的狀態,比如故障檢測、自動擴展、滾動更新等;
  • scheduler負責資源的調度,按照預定的調度策略將Pod調度到相應的機器上;
  • kubelet負責維護容器的生命周期,同時也負責Volume(CVI)和網絡(CNI)的管理;
  • Container runtime負責鏡像管理以及Pod和容器的真正運行(CRI);
  • kube-proxy負責為Service提供cluster內部的服務發現和負載均衡;

除了核心組件,還有一些推薦的Add-ons:

  • kube-dns負責為整個集群提供DNS服務
  • Ingress Controller為服務提供外網入口
  • Heapster提供資源監控
  • Dashboard提供GUI
  • Federation提供跨可用區的集群
  • Fluentd-elasticsearch提供集群日志采集、存儲與查詢

 

2.2 基本概念
主要包括pod,deployment,service
pod
pod
 
是 kubernetes 中最小的編排單位,通常由一個容器組成或者有多個容器組成
pod部署之后會生成一個IP地址,可以通過命令獲取kubectl get pods nginx -o wide
pod IP分配基於flannel:https://www.hi-linux.com/posts/30481.html

 

deployment 

一個 pod 肯定不能均衡,自然要部署多個 Pod。deployment支持創建多個pod副本,支持可以滾動升級,回滾這些

service

會有一個ClusterIP,通過(spec.selector)指定Pod做負載均衡

pod,deployment,servic的部署都是都通編寫yaml文件實現,kind字段對應部署的類型,eg:

apiVersion: v1
kind: Pod
metadata:
  name: nginx
  # 指定 label,便於檢索
  labels:
    app: nginx
spec:
  containers:
  - name: nginx
    # 指定鏡像
    image: nginx:alpine
    # 指定暴露端口
    ports:
    - containerPort: 80

 

此時,服務只能在集群中訪問,如果需要把服務暴露給互聯網,有三種方式:NodePort、LoadBalancer 和 Ingress
后端原理iptables和ipvs

可參考:http://dockone.io/article/4884 Kubernetes的

k8s涉及到的模塊很多,比如負載均衡、彈性伸縮,滾動升級以及故障遷移等,可以在需要的時候針對性地進一步深入了解

k8s主要是對各種資源進行操作,kubectl是k8s的命令行工具(常用的一些命令):
https://kubernetes.io/zh/docs/reference/kubectl/cheatsheet/ kubectl命令行

kubectl create -f amp-pod.yaml
kubectl get pods
kubectl get pods -o wide 獲取pod對應的ip地址
kubectl describe pod amp-dev-pod
kubectl delete pod amp-dev-pod
kubectl logs amp-dev-pod
kubectl describe pod nginx-pod:可以查看異常
kubectl get hpa
kubectl get replicaset
kubectl describe replicaset
kubectl delete replicaset
kubectl get deploy nginx-deployment
kubectl delete deploy nginx-deployment

 

學習k8s,首先得安裝k8s的環境,個人開發環境,推薦minikube
安裝文檔:https://kubernetes.io/docs/tasks/tools/install-minikube/
在線工具:https://kubernetes.io/docs/tutorials/hello-minikube/

這里有一個k8s的系列教程:
https://cloud.tencent.com/developer/article/1515095



其它參考:
https://juejin.im/post/6844903983471935496 使用 k8s 部署你的第一個應用: Pod,Deployment 與 Service
https://blog.csdn.net/u011142688/article/details/80372552 Pod和Deployment
https://kubernetes.io/zh/docs/concepts/workloads/controllers/deployment/ deployment 
https://blog.csdn.net/u011314442/article/details/88825166 虛懸鏡像
https://www.runoob.com/w3cnote/yaml-intro.html yaml
http://docs.kubernetes.org.cn/230.html   k8s中文檔

 


免責聲明!

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



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