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,servicepod 是
podkubernetes 中最小的編排單位,通常由一個容器組成或者有多個容器組成
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中文檔
