k8s是什么
Kubernetes 是一個可移植的株依,可擴展的開源平臺叉存,用于管理容器化的工作負載和服務阎曹,方便了聲明式配置和自動化雕拼。它擁有一個龐大且快速增長的生態(tài)系統(tǒng)纵东。Kubernetes 的服務,支持和工具廣泛可用悲没。Kubernetes?這個名字源于希臘語篮迎,意為“舵手”或“飛行員”。k8s 這個縮寫是因為 k 和 s 之間有八個字符的關系示姿。容器是打包和運行應用程序的好方式甜橱。在生產環(huán)境中,你需要管理運行應用程序的容器栈戳,并確保不會停機岂傲。 例如,如果一個容器發(fā)生故障子檀,則需要啟動另一個容器镊掖。如果系統(tǒng)處理此行為,會不會更容易褂痰??這就是 Kubernetes來解決這些問題的方法亩进!Kubernetes為你提供了一個可彈性運行分布式系統(tǒng)的框架。Kubernetes會滿足你的擴展要求缩歪、故障轉移归薛、部署模式等。例如匪蝙,Kubernetes可以輕松管理系統(tǒng)的Canary部署抓狭。
k8s集群架構
1.主節(jié)點(control plane):承載Kubernetes的控制和管理整個集群系統(tǒng)的控制面板
2.工作節(jié)點(worker node):運行著用戶實際部署的應用
3.Kube-apiserver:所有的控制面板組件和你(client)都需要和他通信(api)
4.Kube-scheculer:調度你的應用聪建,為其分配一個工作節(jié)點(調度)
5.kube-controller-manager:執(zhí)行集群級別的功能送挑,比如復制組件屯远,跟蹤工作節(jié)點,處理失敗節(jié)點等(編排)
6.Etcd:兼具一致性和高可用性的鍵值數(shù)據(jù)庫颤绕,可以作為保存Kubernetes所有集群數(shù)據(jù)的后臺數(shù)據(jù)庫幸海。(持久化存儲)
7.Kubelet:運行在每個節(jié)點的代理,與apiserver通信奥务,并管理他所在節(jié)點的容器
8.Kube-proxy:維護節(jié)點上的網絡規(guī)則涕烧,這些網絡規(guī)則允許從集群內部或外部的網絡會話與Pod進行網絡通信。
9.Container runtime:負責運行容器的軟件汗洒,比如docker,containerd父款,rtk
k8s常用命令
kubectl get <resource-type> //獲得對應資源的list
kubectl get <resource-type> <resource-name> -oyaml/-ojson //以json格式或yaml格式輸出資源
kubectl delete <resource-type> <resource-name> //刪除某個資源
kubectl describe <resource-type> <resource-name>//獲取某個資源的信息
kubectl logs pod <pod-name> -c <container-name>//獲取pod對應容器的log
kubectl apply –f <resource.yaml>//依照文件創(chuàng)建對應資源
kubectl exec?<pod-name>? -c <container>? -- <command>//在容器中執(zhí)行某些命令
kubectl cp –c <container> <pod-name>:/${path} /${localpath}//把容器中的某些文件scp到本地
k8s常用資源
pod
一個pod是一組緊密相關(共享某些資源溢谤,比如network瞻凤,volume)的容器,他們總是一起運行在同一個工作節(jié)點上世杀,以及同一個Linux namespace中阀参。每個pod擁有自己獨立的IP,主機名等瞻坝,運行一個獨立的應用程序蛛壳。應用程序可以是一個單個進程,也可以是一個主應用進程搭配輔助進程所刀,每個進程都在自己的容器中運行
deployment
在pod中部署容器之后衙荐,升級我們的程序可以使用Replicator Controller或者Replicator Set實現(xiàn),同時kubernetes也提供Deployment(基于Replicator set)浮创,并支持聲明式的更新應用忧吟。當創(chuàng)建一個deployment時,replicatorSet也會隨之創(chuàng)建斩披,而實際的pod是由Deployment的replicatorSet創(chuàng)建和管理的溜族。
configmap
ConfigMap是一種API對象,用來將非機密性的數(shù)據(jù)保存到鍵值對中垦沉。使用時煌抒,pods可以將其用作環(huán)境變量、命令行參數(shù)或者存儲卷中的配置文件厕倍。ConfigMap將環(huán)境配置信息和配置環(huán)境解耦寡壮,便于應用配置的修改。 ConfigMap在設計上不是用來保存大量數(shù)據(jù)的绑青。在ConfigMap中保存的數(shù)據(jù)不可超過1MiB诬像。如果你需要保存超出此尺寸限制的數(shù)據(jù),你可能希望考慮掛載存儲卷或者使用獨立的數(shù)據(jù)庫或者文件服務闸婴。
secret
Secret 對象類型用來保存敏感信息坏挠,例如密碼、OAuth 令牌和SSH 密鑰邪乍。將這些信息放在 secret 中比放在 Pod 的定義或者容器鏡像中來說更加安全和靈活降狠。
service
服務是一種為相同功能的pod提供單一不變的接入點的資源,當服務存在時庇楞,他的ip地址和端口不會改變榜配。客戶端通過ip地址和端口建立連接吕晌,這個連接會被服務路由到任意一個pod中蛋褥,而客戶端不需要知道每個單獨提供服務的pod地址。
Ingress
由于每個service都有自己的負載均衡睛驳,而想設置一個全局的負載均衡烙心,然后通過url的不同將請求轉發(fā)給不同的service膜廊,這種全局的,代理不同的service的資源就叫做Ingress淫茵,其實Ingress就是service的service爪瓜。
使用kubeadm部署k8s
準備三臺vm(1 master, 2slave),配置如下:
然后在每一個節(jié)點中先安裝docker匙瘪,要注意修改鏡像源的地址到國內铆铆。
然后確定每個節(jié)點的網絡前置環(huán)境后,安裝kubelet kubeadm 和kubectl
之后使用kubeadm init命令去初始化master節(jié)點丹喻,然后slave node使用kubeadm join加入集群
之后再部署網絡插件薄货,本文以calico為例
至此一個三節(jié)點的k8s集群搭建完畢