K3S+K3D=K8S 開發(fā)利器快速入門

序圖

最近在做服務(wù)私有化建設(shè)這塊刀森,對于物理機能輕量化進行容器資源管理和對服務(wù)運維舌胶,k3s還是比較合適的昧识。對于新鮮事物,作為非運維的我還是迫切想解并搞個demo出來嘗嘗鮮焕数。

提示

本文是在沒有K8S的基礎(chǔ)上去了解和使用K3S,很多點都不會講到纱昧,只是通過自己用到的demo來去理解K3S、K3D及K8S堡赔。我會將一些比較好的鏈接貼在恰當處识脆,方便后續(xù)深入了解和使用。

什么是K3S

官網(wǎng):https://k3s.io/
指南:https://rancher.com/docs/k3s/latest/en/
中文版指南:https://docs.rancher.cn/docs/k3s/_index/
K3s 是一個輕量級的 Kubernetes 發(fā)行版加匈,它針對邊緣計算存璃、物聯(lián)網(wǎng)等場景進行了高度優(yōu)化,易于安裝雕拼,全部在不到100MB的二進制文件中;非常適合

  • Edge
  • IoT
  • CI
  • Development (用的就是這個)
  • ARM
  • Embedding K8s
  • Situations where a PhD in K8s clusterology is infeasible

可以理解為是K8SLite版啥寇,單詞比K8S一半還少偎球,所以叫K3S

什么是K3D

官網(wǎng):https://k3d.io/v5.3.0/
指南:https://k3d.io/v5.3.0/usage/configfile/

k3d 是一個輕量級的包裝器,用于在 docker 中運行k3s(Rancher Lab 的最小 Kubernetes 發(fā)行版)辑甜。
k3d 使得在 docker 中創(chuàng)建單節(jié)點和多節(jié)點k3s集群變得非常容易衰絮,例如在 Kubernetes 上進行本地開發(fā)。

對于我們研發(fā)人員磷醋,我們不希望花太多精力和時間去搭建和維護K8S猫牡,那么我們使用K3D就能通過類似docker的方式來快速的構(gòu)建K3S集群,所以兩者加起來就相當于一個K8S了邓线。

安裝

我的是mac淌友,直接使用brew安裝,K3D官網(wǎng)首頁有各種系統(tǒng)的安裝方式

brew install k3d

附:brew切換國內(nèi)鏡像
如下代表安裝成功

k3d-version1.png

NodePort和Ingress的示例

到這里可能還是一臉懵逼的,因為涉及的點太多骇陈,也不知道從何下手震庭,那就直接用一個demo來學(xué)習(xí):使用集群部署一個可訪問的服務(wù),并在宿主機可以訪問你雌。
1器联、首先我們要知道使用k3d創(chuàng)建集群后,宿主機、k3d拨拓、k3s是怎樣的關(guān)系肴颊,如下圖

就把k3d理解為“docker”

2、使用k3d創(chuàng)建單節(jié)點集群架構(gòu)
為了方便管理千元,這里使用yaml文件來創(chuàng)建集群苫昌,內(nèi)容如下:

創(chuàng)建一個 server節(jié)點為1,agents節(jié)點為2的集群幸海,且集群的30080端口映射宿主機的8087端口


附:非常詳細的說明

接著我們使用命令k3d cluster create --config cluster.yaml 等待執(zhí)行完成即可。

我們可以使用k3d cluster list來查看集群的狀態(tài)奥务,也可以通過kubectl get all --all-namespaces 來查看k3s集群中已經(jīng)部署了資源

3物独、區(qū)別
nodeport和ingress分別屬于k8s中供外部訪問的兩種方式,nodeport又是service資源的一種類型氯葬,其中service分為以下幾種類型:

  • ClusterIp:默認類型挡篓,自動分配一個僅Cluster內(nèi)部可以訪問的虛擬IP
  • NodePort:在ClusterlP基礎(chǔ)上為Service在每臺機器上綁定一個端口,這樣就可以通過<NodeIP>:NodePort 來訪問該服務(wù)
  • LoadBalancer:在NodePort的基礎(chǔ)上帚称,借助云廠商創(chuàng)建一個外部負載均衡器官研,并將請求轉(zhuǎn)發(fā)到<NodeIP>:NodePort
  • ExternalName:把集群外部的服務(wù)引入到集群內(nèi)部來,在集群內(nèi)部直接使用闯睹。沒有任何類型代理被創(chuàng)建戏羽,這只有kubernetes1.7或更高版本的kube-dns才支持

Ingress 公開了從集群外部到集群內(nèi)服務(wù)的 HTTP 和 HTTPS 路由。 流量路由由 Ingress 資源上定義的規(guī)則控制楼吃。

https://kubernetes.io/zh/docs/concepts/services-networking/ingress/

簡單的理解就是ingress可以使用域名對容器內(nèi)的服務(wù)進行綁定始花,并且ingress controller可以動態(tài)的加載和更新域名與pod之間的映射關(guān)系

附:K8s之NodePort LoadBalancer和Ingress的區(qū)別

這里要多翻翻資料理解一下,剛開始還是比較難理解的孩锡。

4酷宵、NodePod
同樣的,我們使用yaml來編寫deployment和service

apiVersion: apps/v1
kind: Deployment
metadata:
  creationTimestamp: null
  labels:
    app: web
  name: web
spec:
  replicas: 1
  selector:
    matchLabels:
      app: web
  strategy: {}
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: web
    spec:
      containers:
      - image: nginx
        name: nginx
        ports:
        - containerPort: 80
        resources:
          limits:
            cpu: 100m
            memory: 256Mi
          requests:
            cpu: 80m
            memory: 128Mi
status: {}

重要的解釋一下

  • kind:類型躬窜,deployment可以理解應(yīng)用資源浇垦,service為訪問規(guī)則資源,ingress即ingress配置資源
  • metadata.name: pod的名稱荣挨,后續(xù)用于service綁定
apiVersion: v1
kind: Service
metadata:
  labels:
    app: web-service
  name: app-service
spec:
  ports:
  - name: 
    nodePort: 30080
    port: 80
    protocol: TCP
    targetPort: 80
  selector:
    app: web
  type: NodePort

  • spec.selector.app 指定當前service綁定的是哪一個pod
  • spec.type 指定當前的service為NodePort類型男韧,默認為ClusterIp

這里有各種port,我畫了個圖幫助理解一下


接著我們使用kubectl apply -f xxx.yaml分別創(chuàng)建deployment和service

使用kubectl get pods,service -o wide 查看詳細信息

到此我們就可以用宿主機直接訪問localhost:8087了


5垦沉、Ingress
我們需要創(chuàng)建兩組deployment煌抒、service和ingress,并且宿主機的hosts需要配置兩個域名
我們先使用k3d cluster delete mycluster刪除集群厕倍,再重建一個集群k3d cluster create --config cluster.yaml

deployment的聲明保持不變寡壮,畢竟只是描述應(yīng)用,改變的是service和新增ingress

apiVersion: v1
kind: Service
metadata:
  labels:
    app: web-service-a
  name: app-service-a
spec:
  ports:
  - name: 
    port: 80
    protocol: TCP
    targetPort: 80
  selector:
    app: web-a

這里的service沒有指定type,因為不需要節(jié)點暴露端口况既,只需要集群內(nèi)訪問ClusterIp

新增ingress

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
   name: app-ingress-a
spec:
  rules:
    - host: localhost # b的內(nèi)容為localhost.k3d.ingress
      http:
        paths:
        - path: /
          pathType: Prefix
          backend:
            service:
              name: app-service-a # 鏈接的是上面svc的名字
              port:
                number: 80

重點說明:

  • host: 即使用哪一個域名來訪問service
  • backend.service.port.number 對應(yīng)的是service的port

注意: 這里要注意一下这溅, ingress默認端口是80,因為所以在整個k3d里棒仍,使用ingress的端口映射如下


所以對應(yīng)的cluster.yaml里的映射也要改為- port: 9001:80 直接用我給的示例運行就行了

.
├── cluster.yaml
├── nginx-a.yaml
├── nginx-b.yaml
├── nginx-ingress-a.yaml
├── nginx-ingress-b.yaml
├── nginx-service-a.yaml
└── nginx-service-b.yaml

分別執(zhí)行a和b


因為用的是同一個鏡像悲靴,我們需要進入a和b的pod中更改nginx默認的html內(nèi)容來區(qū)分


按照同樣的方法莫其,在b的實例中更改

接著需要更改我們的hosts文件乱陡,我用的是mac胳徽,直接在/etc/hosts 更改

127.0.0.1       localhost
127.0.0.1       localhost.k3d.ingress

最后可以訪問驗證了


Snipaste_2022-03-15_23-39-54.png

最后

想快速了解和學(xué)習(xí)某一技術(shù),還是得需要拿示例來學(xué)習(xí),通過以上我可以使用單機快速的來部署kubernetes集群铆铆,并且能編寫yaml腳本去部署應(yīng)用和訪問薄货,后續(xù)還需要繼續(xù)了解kubernetes谅猾,最終能做到熟練使用吧。

示例代碼:https://github.com/vector4wang/spring-boot-quick/tree/master/quick-container/src/main/k3s

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市凳忙,隨后出現(xiàn)的幾起案子涧卵,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,651評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異介汹,居然都是意外死亡嘹承,警方通過查閱死者的電腦和手機叹卷,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,468評論 3 392
  • 文/潘曉璐 我一進店門帝牡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蒙揣,“玉大人罩息,你說我怎么就攤上這事瓷炮∧锵悖” “怎么了茅主?”我有些...
    開封第一講書人閱讀 162,931評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我糯笙,道長豺憔,這世上最難降的妖魔是什么恭应? 我笑而不...
    開封第一講書人閱讀 58,218評論 1 292
  • 正文 為了忘掉前任偶宫,我火速辦了婚禮,結(jié)果婚禮上读宙,老公的妹妹穿的比我還像新娘彻秆。我一直安慰自己,他們只是感情好结闸,可當我...
    茶點故事閱讀 67,234評論 6 388
  • 文/花漫 我一把揭開白布唇兑。 她就那樣靜靜地躺著,像睡著了一般桦锄。 火紅的嫁衣襯著肌膚如雪扎附。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,198評論 1 299
  • 那天结耀,我揣著相機與錄音留夜,去河邊找鬼匙铡。 笑死,一個胖子當著我的面吹牛碍粥,可吹牛的內(nèi)容都是我干的鳖眼。 我是一名探鬼主播,決...
    沈念sama閱讀 40,084評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼嚼摩,長吁一口氣:“原來是場噩夢啊……” “哼钦讳!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起枕面,我...
    開封第一講書人閱讀 38,926評論 0 274
  • 序言:老撾萬榮一對情侶失蹤愿卒,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后潮秘,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體琼开,經(jīng)...
    沈念sama閱讀 45,341評論 1 311
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,563評論 2 333
  • 正文 我和宋清朗相戀三年枕荞,在試婚紗的時候發(fā)現(xiàn)自己被綠了柜候。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,731評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡躏精,死狀恐怖改橘,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情玉控,我是刑警寧澤,帶...
    沈念sama閱讀 35,430評論 5 343
  • 正文 年R本政府宣布狮惜,位于F島的核電站高诺,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏碾篡。R本人自食惡果不足惜虱而,卻給世界環(huán)境...
    茶點故事閱讀 41,036評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望开泽。 院中可真熱鬧牡拇,春花似錦、人聲如沸穆律。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,676評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽峦耘。三九已至剔蹋,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間辅髓,已是汗流浹背泣崩。 一陣腳步聲響...
    開封第一講書人閱讀 32,829評論 1 269
  • 我被黑心中介騙來泰國打工少梁, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人矫付。 一個月前我還...
    沈念sama閱讀 47,743評論 2 368
  • 正文 我出身青樓凯沪,卻偏偏與公主長得像,于是被迫代替她去往敵國和親买优。 傳聞我的和親對象是個殘疾皇子妨马,可洞房花燭夜當晚...
    茶點故事閱讀 44,629評論 2 354

推薦閱讀更多精彩內(nèi)容