摘要:常見的和等都是屬于某一個的默認(rèn)是,而等則不屬于任何。其實其的命令和上面都差不多,這里不一一列出了創(chuàng)建查看啟動情況是一個定義了一組的策略的抽象,可以理解為抽象到用戶層的一個宏觀服務(wù)。其實這個概念在集群里也有,可以參照理解。
【利用K8S技術(shù)棧打造個人私有云系列文章目錄】
利用K8S技術(shù)棧打造個人私有云(連載之:初章)
利用K8S技術(shù)棧打造個人私有云(連載之:K8S集群搭建)
利用K8S技術(shù)棧打造個人私有云(連載之:K8S環(huán)境理解和練手)
利用K8S技術(shù)棧打造個人私有云(連載之:基礎(chǔ)鏡像制作與實驗)
利用K8S技術(shù)棧打造個人私有云(連載之:資源控制研究)
利用K8S技術(shù)棧打造個人私有云(連載之:私有云客戶端打造)
在前文中我們已經(jīng)搭建好了K8S集群,接下來就來講述一下K8S的一些重要的概念和知識,并搞兩個例子在集群中來實際練手感受一把!
注: 本文首發(fā)于 My 公眾號 CodeSheep ,可 長按 或 掃描 下面的 小心心 來訂閱 ↓ ↓ ↓
kubernetes的概念非常多,組件也不少,本文主要闡述一下幾個最主要、平時用得最頻繁的概念,最詳細(xì)的學(xué)習(xí)文檔是官網(wǎng)教程!
K8S設(shè)計架構(gòu)該圖描述的設(shè)計架構(gòu)是一個典型的M-S架構(gòu),一主兩從,這和我搭建的集群基本是一致的,主節(jié)點和從節(jié)點上運行哪些kube組件,其實在我搭建集群那篇文章也已經(jīng)講過了,下面來闡述一下kubernetes集群里的重要概念和操作命令。
PodPod是Kubernetes中最小的管理元素,Pod是一組容器的集合,且一個Pod只能運行在一個Node上,Pod是kubernetes調(diào)度、部署、擴展的基本單位
kubectl run命令創(chuàng)建一個pod:kubectl run pod-example --image=nginx
kubectl create命令創(chuàng)建pod:kubectl create -f create_pod.yaml
刪除pod:kubectl delete po pod名
查看pod啟動情況:kubectl get pods , kubectl get pods -o wide
查看pod的詳細(xì)信息:kubectl discrible po pod名
NamespaceNamespace是對一組資源和對象的抽象集合,比如可以用來將系統(tǒng)內(nèi)部的對象劃分為不同的項目組或用戶組。常見的pods, services, replication controllers和deployments等都是屬于某一個namespace的(默認(rèn)是default),而node, persistentVolumes等則不屬于任何namespace。
創(chuàng)建 kubectl create namespace namespace名
刪除 kubectl delete namespaces namespace名
查詢 kubectl get namespaces
Replication Controller(RC)Replication Controller 保證了在所有時間內(nèi),都有特定數(shù)量的Pod副本正在運行,如果太多了,Replication Controller就殺死幾個,如果太少了,Replication Controller會新建幾個,和直接創(chuàng)建的pod不同的是,Replication Controller會替換掉那些刪除的或者被終止的pod,而不管刪除的原因是什么。
其實其CURD的命令和上面都差不多,這里不一一列出了
創(chuàng)建:kubectl create -f create_rc.json
查看rc啟動情況:kubectl get rc
ServiceService 是一個定義了一組Pod的策略的抽象,可以理解為抽象到用戶層的一個宏觀服務(wù)。其實這個概念在Swarm集群里也有,可以參照理解。
Service的這樣一層抽象最起碼可以抵御兩個方面的問題:
Pod重啟后IP地址的變化(保持用我們系統(tǒng)的客戶其IP不變)
提供負(fù)載均衡能力
其CURD的命令和上面都差不多,這里依然不一一列出
創(chuàng)建service:kubectr create -f redis-master-service.json
查看service的啟動情況:kubectl get svc
這里給一個Service的示例:
apiVersion: v1 kind: Service metadata: name: my-nginx-svc labels: app: nginx spec: type: LoadBalancer ports: - port: 80 selector: app: nginx
好了,理論的東西看多了可能有點蒙,只能多找點不同的材料閱讀并理解了。下面開始做幾個練手示例,這幾個例子都源自于K8S官網(wǎng),對于理解理論概念非常有好處,下面開始動手吧!
本例子創(chuàng)建一個包含兩個容器的POD,并在容器之間完成文件交換
yaml配置文件如下:
apiVersion: v1 kind: Pod metadata: name: two-containers spec: restartPolicy: Never volumes: - name: shared-data emptyDir: {} containers: - name: nginx-container image: nginx volumeMounts: - name: shared-data mountPath: /usr/share/nginx/html - name: debian-container image: debian volumeMounts: - name: shared-data mountPath: /pod-data command: ["/bin/sh"] args: ["-c", "echo Hello from the debian container > /pod-data/index.html"]
創(chuàng)建pod
kubectl create -f two-container-pod.yaml
查看pod和容器的信息
kubectl get pod two-containers --output=yaml
執(zhí)行完成輸出內(nèi)容大致如下(經(jīng)過縮減):
apiVersion: v1 kind: Pod metadata: ... name: two-containers namespace: default ... spec: ... containerStatuses: - containerID: docker://c1d8abd1 ... image: debian ... lastState: terminated: // debian容器已停止 ... name: debian-container ... - containerID: docker://96c1ff2c5bb ... image: nginx ... name: nginx-container ... state: running: // nginx容器已運行 ...
可以看到debian容器已經(jīng)停止了,nginx容器依然運行
我們進(jìn)入nginx容器的/bin/bash并驗證nginx服務(wù)器
kubectl exec -it two-containers -c nginx-container -- /bin/bash
執(zhí)行如下命令來安裝curl:
root@two-containers:/# apt-get update root@two-containers:/# apt-get install curl procps root@two-containers:/# ps aux
然后執(zhí)行curl localhost,可以獲得輸出:
Hello from the debian container
可見debian容器中寫入的東西在nginx容器中獲得了,因此文件交換也完成了
用Pod來做一件事很簡單吧!
本示例演示的是:部署一個包含Redis集群、基于PHP的留言板系統(tǒng)
創(chuàng)建redis-master的RC
redis-master-controller.yaml內(nèi)容:
apiVersion: v1 kind: ReplicationController metadata: name: redis-master spec: replicas: 1 selector: name: redis-master template: metadata: name: redis-master labels: name: redis-master spec: containers: - name: redis-master image: kubeguide/redis-master ports: - containerPort: 6379
創(chuàng)建該RC并查看創(chuàng)建結(jié)果:
kubectl create -f redis-master-controller.yaml kubectl get rc kubectl get pods
創(chuàng)建redis-master的service
redis-master-service.yaml內(nèi)容:
apiVersion: v1 kind: Service metadata: name: redis-master labels: name: redis-master spec: ports: - port: 6379 targetPort: 6379 selector: name: redis-master
創(chuàng)建該Service并查看:
kubectl create -f redis-master-service.yaml kubectl get services
創(chuàng)建redis-slave的RC
redis-slave-controller.yaml文件內(nèi)容:
apiVersion: v1 kind: ReplicationController metadata: name: redis-slave spec: replicas: 2 selector: # RC通過spec.selector來篩選要控制的Pod name: redis-slave template: metadata: name: redis-slave labels: # Pod的label,可以看到這個label與spec.selector相同 name: redis-slave spec: containers: - name: redis-slave image: kubeguide/guestbook-redis-slave env: - name: GET_HOSTS_FROM value: env ports: - containerPort: 6379
創(chuàng)建該RC并查看:
kubectl create -f redis-slave-controller.yaml kubectl get rc kubectl get pods
創(chuàng)建redis-slave的service
redis-slave-service.yaml文件內(nèi)容:
apiVersion: v1 kind: Service metadata: name: redis-slave labels: name: redis-slave spec: ports: - port: 6379 selector: name: redis-slave
創(chuàng)建該Service并查看:
kubectl create -f redis-slave-service.yaml kubectl get services
創(chuàng)建frontend的RC
frontend-controller.yaml內(nèi)容如下:
apiVersion: v1 kind: ReplicationController metadata: name: frontend labels: name: frontend spec: replicas: 3 selector: name: frontend template: metadata: labels: name: frontend spec: containers: - name: frontend image: kubeguide/guestbook-php-frontend env: - name: GET_HOSTS_FROM value: env ports: - containerPort: 80
創(chuàng)建該RC并查看
kubectl create -f frontend-controller.yaml kubectl get rc kubectl get pods
創(chuàng)建frontend的Service
frontend-service.yaml文件內(nèi)容如下:
apiVersion: v1 kind: Service metadata: name: frontend labels: name: frontend spec: type: NodePort ports: - port: 80 nodePort: 30001 selector: name: frontend
創(chuàng)建該Service并查看
kubectl create -f frontend-service.yaml kubectl get services
訪問http://your-host:30001/
簡單的留言板系統(tǒng)就生成了!
作者更多的原創(chuàng)文章在此,歡迎觀賞
My Personal Blog
作者更多的SpringBt實踐文章在此:
Spring Boot應(yīng)用監(jiān)控實戰(zhàn)
SpringBoot應(yīng)用部署于外置Tomcat容器
ElasticSearch搜索引擎在SpringBt中的實踐
初探Kotlin+SpringBoot聯(lián)合編程
Spring Boot日志框架實踐
SpringBoot優(yōu)雅編碼之:Lombok加持
如果有興趣,也可以抽點時間看看作者一些關(guān)于容器化、微服務(wù)化方面的文章:
利用K8S技術(shù)棧打造個人私有云 連載文章
從一份配置清單詳解Nginx服務(wù)器配置
Docker容器可視化監(jiān)控中心搭建
利用ELK搭建Docker容器化應(yīng)用日志中心
RPC框架實踐之:Apache Thrift
RPC框架實踐之:Google gRPC
微服務(wù)調(diào)用鏈追蹤中心搭建
Docker容器跨主機通信
Docker Swarm集群初探
高效編寫Dockerfile的幾條準(zhǔn)則
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/28032.html
摘要:常見的和等都是屬于某一個的默認(rèn)是,而等則不屬于任何。其實其的命令和上面都差不多,這里不一一列出了創(chuàng)建查看啟動情況是一個定義了一組的策略的抽象,可以理解為抽象到用戶層的一個宏觀服務(wù)。其實這個概念在集群里也有,可以參照理解。 showImg(https://segmentfault.com/img/remote/1460000013229549); 【利用K8S技術(shù)棧打造個人私有云系列文...
摘要:前端技術(shù)棧還是非常龐大的,為了能夠借助已經(jīng)存在的輪子來造出一輛車,所以我選擇了進(jìn)行實踐。狀態(tài)的管理的狀態(tài)管理依靠完成,用其來管理的所有組件狀態(tài)。私有云客戶端打造主頁面首先是主頁面,可以打開任何一個云主機系統(tǒng)的頁面看,基本類似。 showImg(https://segmentfault.com/img/remote/1460000013930354); 【利用K8S技術(shù)棧打造個人私有...
摘要:前端技術(shù)棧還是非常龐大的,為了能夠借助已經(jīng)存在的輪子來造出一輛車,所以我選擇了進(jìn)行實踐。狀態(tài)的管理的狀態(tài)管理依靠完成,用其來管理的所有組件狀態(tài)。私有云客戶端打造主頁面首先是主頁面,可以打開任何一個云主機系統(tǒng)的頁面看,基本類似。 showImg(https://segmentfault.com/img/remote/1460000013930354); 【利用K8S技術(shù)棧打造個人私有...
摘要:因此本篇博文將講解如何在本地構(gòu)建一個帶組件的底包鏡像并上傳到上供下載使用。 showImg(https://segmentfault.com/img/remote/1460000013318761); 【利用K8S技術(shù)棧打造個人私有云系列文章目錄】 利用K8S技術(shù)棧打造個人私有云(連載之:初章) 利用K8S技術(shù)棧打造個人私有云(連載之:K8S集群搭建) 利用K8S技術(shù)棧打造個人私...
摘要:因此本篇博文將講解如何在本地構(gòu)建一個帶組件的底包鏡像并上傳到上供下載使用。 showImg(https://segmentfault.com/img/remote/1460000013318761); 【利用K8S技術(shù)棧打造個人私有云系列文章目錄】 利用K8S技術(shù)棧打造個人私有云(連載之:初章) 利用K8S技術(shù)棧打造個人私有云(連載之:K8S集群搭建) 利用K8S技術(shù)棧打造個人私...
閱讀 3261·2021-11-18 10:02
閱讀 1960·2021-09-22 10:54
閱讀 2999·2019-08-30 15:43
閱讀 2590·2019-08-30 13:22
閱讀 1587·2019-08-29 13:57
閱讀 1057·2019-08-29 13:27
閱讀 750·2019-08-26 14:05
閱讀 2536·2019-08-26 13:30