wsl搭建k8s集群補充內(nèi)容
前言
昨天我們分享了如何在wsl上搭建k8s集群,但是由于內(nèi)容多,昨天時間也比較緊促,所以好多知識點并沒有覆蓋到,考慮到好多小伙伴可能也是第一次使用k8s,我們今天把一些基礎(chǔ)知識再補充下,一方面是為了讓大家清楚每一步操作的目的,清楚每一個命令的作用,另外一方面就是我自己確實也需要把這這兩天積累的基礎(chǔ)知識整理下,理清楚思路,便于知識積累。
k8s補充知識
查看基本信息
kubectl get option optionName [-n][-namespace] [namespaceName]

這個命令的作用是獲取option的信息,option可以是node、pod、service,在獲取pod和service的時候,是需要通過-namespace指定命名空間的;
service和namespace可以寫成簡寫的:
kubectl svc -n 命名空間名稱
如果要獲取具體的option,可以指定optionName

如果要獲取所有命名空間下的svc或者pod,可以通過:
kubectl get svc -A
# 或者
kubectl get pod -A



我們通常訪問的是service,所以最常用的是kubectl get svc -n kubernetes-dashboard通過這個命令,我們可以查看服務(wù)對外提供的端口。
查看詳細(xì)信息
kubectl describe option [-n][-namespace] [namespaceName]
這里的參數(shù)和前面kubectl get是一樣的,只是describe獲取到的信息更詳細(xì),包括日志信息,所以在實際使用過程中,我們經(jīng)常用這個命令查看日志信息:



創(chuàng)建服務(wù)
kubectl apply -f 你的yaml文件
比如創(chuàng)建kuboard
kubectl apply -f https://addons.kuboard.cn/kuboard/kuboard-v3.yaml
上面這種方式是通過線上yaml文件,你也可以用本地yaml文件創(chuàng)建:
kubectl apply -f kuboard/kuboard-v3.yaml
yaml文件結(jié)構(gòu)如下:

對于k8s的yaml文件,我目前只了解常用的節(jié)點的作用,還不知道如何編寫一個yaml文件,但是如果你用了kuboard這樣的管理工具之后,是不需要自己編寫yaml文件的。
刪除服務(wù)
刪除服務(wù)也很簡單,只需要把上面的命令改成delete即可:
kubectl delete -f https://addons.kuboard.cn/kuboard/kuboard-v3.yaml
如果沒有yaml文件,刪除起來確實繁瑣了很多
k8s代理
昨天我們訪問kubernetes-dashboard就是通過代理的方式,啟用代理的方式也很簡單,直接執(zhí)行下面的命令就好了:
kubectl proxy

k8s代理啟動后,我們就可以通過代理服務(wù)訪問我們k8s里面的服務(wù)了,訪問地址如下:
http://localhost:8001/api/v1/namespaces/[Namespace]/services/[Name]:[Port]/proxy/
我們把將地址中的[namespace]、[name]和[port]替換成我們自己的服務(wù)就可以了。我們可以通過describe命令獲取這些信息:

所以上面圖片中的服務(wù),訪問地址是這樣的:
http://localhost:8001/api/v1/namespaces/kuboard/services/kuboard-v3:80/proxy/

這個服務(wù)也是一個控制臺,這個控制臺是國人開發(fā)的,很多公司線上環(huán)境就用的這款管理工具,我們公司也是剛剛切換到k8s,也用的是kuboard,從體驗上來說,確實比官方的控制臺好用,可能也是我用官方的管理工具時間短。

關(guān)于kuboard的使用,今天我們就不分享了,因為kuboard本身不支持代理訪問,雖然能登陸上,但是后面訪問的時候,會報404的錯誤:

主要還是地址的問題,我們代理之后服務(wù)的根目錄應(yīng)該是:
http://localhost:8001/api/v1/namespaces/kuboard/services/kuboard-v3:80/proxy/服務(wù)資源
但是kuboard要求的服務(wù)根目錄是:
http://localhost:8001/服務(wù)資源
所以會報404錯誤,后面我們解決了windows外網(wǎng)直接訪問wsl中的k8s集群服務(wù)的問題,再來分享。
關(guān)于k8s
現(xiàn)階段k8s應(yīng)該算是云原生比較主流的技術(shù),得益于Go語言和Linux加持,k8s確實比docker更適合企業(yè)大型應(yīng)用的集群部署,因為k8s有著docker無法替代的功能,比如k8s-dns,雖然k8s要依賴docker進行鏡像管理,但是比docker更龐大。
這里有一個形象的例子,可以說明我對k8s和docker的理解。docker中文的意思是碼頭工人,我們的系統(tǒng)鏡像就好比貨物,所以docker可以幫我們需要的系統(tǒng)鏡像(貨物),裝卸到我們需要的地方,就類似于搬運工人;k8s就相當(dāng)于自動化港口,一個是規(guī)模更大,可以停放更大船舶,更多的貨物;一個是自動化程度更高,集成程度也更高,我們不需要像搬運工人再去手動(docker pull)搬運貨物(系統(tǒng)鏡像),只需要在k8s控制臺操作一下,貨物就會自動裝卸,然后還可以實時監(jiān)測各個系統(tǒng)狀況,不僅效率高,而且容錯機制還好,如果某個節(jié)點無響應(yīng)或者響應(yīng)數(shù)據(jù)不正常,k8s會根據(jù)重啟機制,重啟我們的pod節(jié)點,從這一點上說,k8s確實比docker優(yōu)秀。
當(dāng)然,任何事物都不可能完美,雖然k8s看起來無懈可擊,但是在實際使用過程中,你可能會遇到各種各樣的坑,比如如果你的服務(wù)啟動時間比較長,k8s就以為你的服務(wù)假死,然后重啟服務(wù),這樣你的服務(wù)會一直被重啟,而且一直起不來。當(dāng)然,這樣說明確實k8s是為微服務(wù)量身打造的,因為如果你的服務(wù)啟動時間長,就說明你的服務(wù)還不夠微。
總之,k8s雖然有一些缺點,但是和它的優(yōu)點相比,那確實比較優(yōu)秀了,而且隨著不斷的深入了解,你會發(fā)現(xiàn)k8s很多地方設(shè)計的牛逼,對開發(fā)人員確實很友好。最后,感興趣的小伙伴,好好去把玩下吧,我覺得你會喜歡上這個東東的……
總結(jié)
今天我們補充了k8s的一些常用命令,通過這些命令,我們可以管理我們k8s集群下的服務(wù),查看服務(wù)的狀態(tài)、日志等,雖然作為開發(fā)人員我們真正要用好的是像kuboard這樣的工具,因為日常工作中我們一般并不會擁有kubectl控制臺的權(quán)限,但是我還是建議各位小伙伴要學(xué)好k8s的基礎(chǔ)知識,只有如此你才能更好地理解k8s的運行原理,才能站在更高的高度看問題,你說呢?
