簡言
????????k8s yaml中文件內(nèi)容一般有kind類型之分,每種類型有不同的功能(一般用---符號隔開)
常見的kind類型:
????????(1)Endpoints:Endpoints可以把外部的鏈接到k8s系統(tǒng)中(可以理解為引用外部資源,如將一個外部mysql連接到k8s中)
????????(2)Service:部署一個內(nèi)部虛擬IP,其他deployment可以鏈接。(可以簡單理解為K8S的端口映射,如外部3444端口映射到pod應(yīng)用中80端口)
????????(3)Secrets:用于存儲和管理一些敏感數(shù)據(jù),比如密碼,token,密鑰等敏感信息。(可以理解為ssh中的密鑰)
????????(4)Deployment:部署一個Pod,內(nèi)部只能鏈接service,無法互相鏈接。(可以簡單理解為一個pod應(yīng)用的部署工具,即使部署的應(yīng)用掛了還能重啟,但只能鏈接service服務(wù))
備注:
(1)metadata一般每個類型中會帶有metadata.name即表示該類型生成的名字,如
1? ? metadata:
2? ? ? ? ?name: suncat
(2)spec,資源詳細定義,后面一般會帶有該類型的詳細信息。
如Service類型中定義接口的信息
1? ?spec:
2? ? ? ?ports:
3? ? ? ? ???- port: 3306
4? ? ? ? ? ? ? ? targetPort: 3306
5? ? ? ? ? ? ? ? ?protocol: TCP
6? ? ? ? ? ? ? ? ?name: http
下面分別對下面幾種kind類型來進行講解:
一、Endpoints
先來看個需求:
????????我有個一個外部的mysql,不是使用本機的k8s部署的。但是現(xiàn)在我的應(yīng)用程序想用它。那這時候,我改怎么使用它呢?畢竟k8s中的pod大部分只能通過service來鏈接。
這時候Endpoints就出現(xiàn)了,他是可以把外部的鏈接到k8s系統(tǒng)中,如:
? ? ? ? (1)首先我們看到,我們定義了名為suncat-endpoints的Endpoints,同時往suncat-endpoints配置了代理IP以及服務(wù)的端口。
? ? ? ? (2)接著我們看下一個,以---分隔符隔開的另一個類型Service,定義了一個名為suncat-endpoints的Service,同時往該Service中配置內(nèi)部端口映射到Pod暴露出的端口port: 3306,以及對外暴露的端口號targetPort: 3306
? ? ? ? 總結(jié):通過配置Endpoints以及Service,Endpoints將k8s的端口鏈接到外部mysql端口,而Service將k8s中內(nèi)部的端口映射到k8s端口,以此就完成了pod應(yīng)用訪問外部鏈接。
二、Service
先來看個需求:
????????我們K8S里啟動了一個pod應(yīng)用,并里面運行了端口為8848的前端頁面。這時候,我外部怎么訪問K8S內(nèi)部pod應(yīng)用這個端口為8848的前端頁面?
????????這時候就需要定義Service類型了,使pod應(yīng)用端口8848映射到K8S特定端口中,外部應(yīng)用訪問K8S特定端口即可訪問前端頁面
樣例:
????????首先我們看到,定義了一個名為suncat-service的Service類型,他的職責時將port: 8848端口映射到nodePort: 38011對外暴露端口,并且他的管理的對應(yīng)的應(yīng)用時suncat-app應(yīng)用
????????也就是說,將pod應(yīng)用名為suncat-app中端口為8848的端口映射到對外暴露端口38011,只要外部服務(wù)訪問該服務(wù)器IP:38011,即可區(qū)訪問k8s中suncat-app應(yīng)用的8848端口
三、Secrets
????????這個類型比較有意思,更多是用作于類似密鑰的形式。
????????(估計是不想明文記錄賬號密碼等信息,但大部分加密都是Base64加密。所以說,我覺得有點像是防君子不防小人)
Secret有三種類型:
(1)Opaque:
????????????????base64 編碼格式的 Secret,用來存儲密碼、密鑰等;但數(shù)據(jù)也可以通過base64 –decode解碼得到原始數(shù)據(jù),所有加密性很弱。
(2)Service Account:
????????用來訪問Kubernetes API,由Kubernetes自動創(chuàng)建,并且會自動掛載到Pod的的/run/secrets/kubernetes.io/serviceaccount 目錄中。
(3)kubernetes.io/dockerconfigjson :
????????用來存儲私有docker registry的認證信息。
下面分別講解一下:
Opaque:這種一般是加密一些賬號密碼,然后作為環(huán)境變量中使用
例子:
????????首先我們看到,定義了一個名為suncat_secret_userinfo的Secret類型,屬于Secret下的Opaque種類,它所帶key-value鍵值數(shù)據(jù)有兩個分別是“name: c3VuY2F0”和“age: MjY=”。
????????可能這樣看有點不是很理解name是什么值、age是什么值,我們不妨將他們的值用Base64解密一下。
字段 | 原值 | Base64解密后的值 |
name | c3VuY2F0 | suncat |
age | MjY= | 26 |
????????可以看到”name“的值為“suncat”,“age”的值是“26”
創(chuàng)建的secret的使用方法有掛載和環(huán)境變量兩種,以下只介紹在環(huán)境變量中的使用方法:
kubernetes.io/dockerconfigjson:一般是用來拉鏡像的密鑰。比如自己搭建的harbor,有些鏡像肯定不是公開的,是私密的。這時候拉取鏡像就需要密碼,需要密鑰。
例子:
????????首先我們看到,定義了一個名為suncat-harbor-secret的Secret類型,屬于Secret下的kubernetes.io/dockerconfigjson種類,它所帶的dockerconfigjson數(shù)據(jù)是一個由base64加密的json數(shù)據(jù)
????????我們將
eyJhdXRocyI6eyIxOTIuMTY4LjAuMTo4MDkwIjp7InVzZXJuYW1lIjoic3VuY2F0IiwicGFzc3dvcmQiOiIxMjM0NTYiLCJhdXRoIjoiYzNWdVkyRjBPakV5TXpRMU5nPT0ifX19
????????進行base64解密:
{"auths":{"192.168.0.1:8090":{"username":"suncat","password":"123456","auth":"c3VuY2F0OjEyMzQ1Ng=="}}}
我們把格式弄得漂亮一點再看看
????????我們可以看出,這是一個驗證的信息,192.168.0.1:8090值的是harbor倉庫的地址,而username后的值“suncat”是登錄賬號,password后的值“123456”是登錄密碼
????????而auth后的值"c3VuY2F0OjEyMzQ1Ng=="則又是一個base64加密的值,它用于校驗。我們將其解密后得到suncat:123456,也就是賬號跟密碼
備注:
創(chuàng)建k8s集群的kubernetes.io/dockerconfigjson種類的secret
四、Deployment
先來看一下需求:
????????我們希望在k8s上部署一個應(yīng)用,如果該應(yīng)用掛了還能重啟。如果單單創(chuàng)建一個pod類型是不夠的,應(yīng)為該pod應(yīng)用掛了,就不會重啟了。
????????如果創(chuàng)建一個Deployment類型,可以創(chuàng)建管理該pod應(yīng)用,掛了都會給你重啟。
以上內(nèi)容有點多,我們慢慢講解:
????????(1)首先,我們定義了名為suncat-deployment的Deployment,并且該Deployment所管理的app應(yīng)用的標簽是suncat-app,副本數(shù)為1。
????????(2)然后在數(shù)據(jù)定義里定義了一個定義業(yè)務(wù)模板template??梢钥闯?,在業(yè)務(wù)模板里定義了一個名為suncat-app的pod應(yīng)用。
????????(3)同時該業(yè)務(wù)模板還定義了該suncat-app應(yīng)用的容器名,同樣也名為suncat-app,而該容器所拉取的鏡像來源于registry.k8s.suncat:4444/suncat/testapp:1.0。
????????這時候就會有人問,如果該拉取鏡像的地址是非公開的,需要密碼的。那該怎么辦呢?
????????還記得上面說到的類型Secrets下的kubernetes.io/dockerconfigjson種類么,這東西就是用來作密鑰拉鏡像的,只需要在imagePullSecrets下配置一個事先創(chuàng)建好的、名為suncat-harbor-secret的密鑰即可拉取鏡像
????????(4)就是配置一些該pod的端口為8848,拉取方式imagePullPolicy為Always總是拉取pull
????????(5)這個的話,就是配置該pod的正常請求cpu和內(nèi)存,以及最大限制的cpu和內(nèi)存。當然你不設(shè)置也所謂。
????????在該配置中,我設(shè)置該pod正常請求的cpu為0.5(半核)以及內(nèi)存為200M,最大限制的cpu為1核、以及內(nèi)存為400M
備注:
1、imagePullPolicy拉取方式參數(shù)詳情有哪些?
????????(1)Always:總是拉取pull
????????(2)IfNotPresent:默認值,本地有則使?本地鏡像,不拉取文章來源:http://www.zghlxwxcb.cn/news/detail-833081.html
????????(3)Never:只使?本地鏡像,從不拉取文章來源地址http://www.zghlxwxcb.cn/news/detail-833081.html
到了這里,關(guān)于k8s(Kubernetes)中yaml文件快速閱讀理解的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!