k8s學習 - API
之前對k8s並沒有很深入的了解,最近想把手頭一個項目全部放到k8s上,以方便部署,需要研究。這里記錄一下自己研究過程中頭腦中的理解。
k8s 和 docker
首先,需要先理解下docker。鏡像把你要的應用和環境打包在一個容器里面,有了容器之后,部署,擴容等操作就很方便了。但是,隨着微服務化,服務一多,容器就多了,多了之后,就需要對容器進行管理。需要有一套很完善的管理系統。那么 k8s 就出現了。
k8s 全稱就是kubernets,和 i10n 的名字類似,中間的數字就是英文單詞的數字。它的官網是k8s官網。
在 k8s 機器上同時應該安裝docker-server,因為k8s的基礎是docker鏡像,這些鏡像需要通過docker-server來從遠端獲取和實例化。
k8s 就是一個分布式系統,你可以在一台機器上安裝k8s集群,也可以在多台機器上安裝k8s 集群。它是master-node形式的有一個k8s節點充當master,其他k8s節點充當node。這整個分布式系統,就相當於一個服務集群。我們可以在這個集群上啟動多個服務,每個服務都有自己的虛擬IP,虛擬端口,各個服務可以通過這些IP和端口進行交互,最終由一個出口IP和出口端口對外提供服務。
k8s API
k8s是分布式系統,它本身有各個組件,各個組件之間的通信,對外提供的都是rest接口的http服務。這些接口就統稱為 k8s API。k8s的api也很有特點,首先它是分組的,它有很多api組。這些api組都有不同的功能,有的api組負責權限,有的api組負責存儲。
每個api組還有版本的區分,它其實也有大小版本區分,但是不是我們常用的1.1.1這種版本號,k8s api 大的版本都是以v1, v2 這種為迭代的,每個大的版本里面區別三個等級,一種是Alpha等級,這個等級就是還在調試的,基本我們不作為開發者的話,這種等級的接口版本不會接觸到。它會在大版本后面直接跟着alpha,比如v1alpha2, 就代表是v1大版本的alpha等級第2小版本。第二個等級就是Beta等級,這個等級說明接口基本可以使用了,也經過完整測試了。會比正常的穩定版本有更多的功能。它的版本格式如v1beta2。第三個等級就是Stable版本,這個等級說明這個是個穩定版,可以放心使用。
所以,我們通過 kubectl api-versions
可以看到很多api組和版本號:
admissionregistration.k8s.io/v1beta1
apiextensions.k8s.io/v1beta1
apiregistration.k8s.io/v1
apiregistration.k8s.io/v1beta1
apps/v1
apps/v1beta1
apps/v1beta2
authentication.k8s.io/v1
authentication.k8s.io/v1beta1
authorization.k8s.io/v1
authorization.k8s.io/v1beta1
autoscaling/v1
autoscaling/v2beta1
batch/v1
batch/v1beta1
certificates.k8s.io/v1beta1
compose.docker.com/v1beta1
compose.docker.com/v1beta2
events.k8s.io/v1beta1
extensions/v1beta1
networking.k8s.io/v1
policy/v1beta1
rbac.authorization.k8s.io/v1
rbac.authorization.k8s.io/v1beta1
storage.k8s.io/v1
storage.k8s.io/v1beta1
v1
比如 authorization.k8s.io/v1beta1
就代表authorization.k8s.io這個api組的v1大版本下的beta等級1小版本。
我們后續在yaml中寫的apiVerison就是這個版本意思。
那這些版本的api怎么調用呢?官方使用swagger對接口進行管理和說明,首先我們可以啟動kubectl proxy
來啟動k8s server的http代理。默認打開地址是http://127.0.0.1:8001/
。使用http://127.0.0.1:8001/swagger.json
就可以看到k8s的全部api說明了。如果你有swagger-editor的話,你還可以把這個json放到editor里面,就能看到所有的接口了。(接口特別多,加載比較慢)
。
現在有了k8s接口,我們完全可以自己寫一個客戶端來調用。客戶端庫。但是我們最常用的客戶端命令是kubectl。