国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

極速上手k8s,Kubernetes 從入門到摸魚系列-實(shí)踐篇

這篇具有很好參考價(jià)值的文章主要介紹了極速上手k8s,Kubernetes 從入門到摸魚系列-實(shí)踐篇。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

大家好,我是比特桃。本文為《極速上手k8s,Kubernetes 從入門到摸魚系列》的實(shí)戰(zhàn)篇,旨在快速上手k8s。如沒有閱讀過(guò)k8s相關(guān)理論的朋友,可以先閱讀理論篇。

1. 實(shí)踐環(huán)境

k8s 的意義在于分布式大規(guī)模容器編排,所以如果我們想要在實(shí)際中發(fā)揮它的最大價(jià)值,至少也得需要 3 臺(tái)機(jī)器。其中一臺(tái)是主節(jié)點(diǎn),剩余兩臺(tái)是工作節(jié)點(diǎn)。當(dāng)然,也可以通過(guò)虛擬機(jī)中創(chuàng)建三個(gè)操作系統(tǒng)來(lái)實(shí)踐。但這樣操作還是很繁瑣,其實(shí)在學(xué)習(xí)中,有更方便的辦法進(jìn)行。

  • minikube
    能讓你在本地運(yùn)行 Kubernetes。 minikube 在你本地的個(gè)人計(jì)算機(jī)(包括 Windows、macOS 和 Linux PC)運(yùn)行一個(gè)單節(jié)點(diǎn)的 Kubernetes 集群,以便你來(lái)嘗試 Kubernetes 或者開展每天的開發(fā)工作。
  • Kind
    另一個(gè)Kubernetes SIGs項(xiàng)目,但與minikube相比有很大不同。顧名思義,它將集群移動(dòng)到Docker容器中。與生成VM相比,這將顯著加快啟動(dòng)速度。
  • Docker Desktop
    在Windows、Mac中常用的Docker Desktop 中也內(nèi)置了一個(gè) k8s 功能,只需要在設(shè)置中即可打開使用。

生產(chǎn)環(huán)境上的集群安裝和配置不建議使用 kind 或者 minikube。本文采用 minikube 來(lái)開展,使用其他的環(huán)境其實(shí)并沒有太大區(qū)別。minikube的安裝可以查閱官網(wǎng),根據(jù)自身不同的操作系統(tǒng)進(jìn)行安裝。minikube 是可以選擇依賴于容器還是本機(jī)VM:
極速上手k8s,Kubernetes 從入門到摸魚系列-實(shí)踐篇,Kubernetes,kubernetes,容器,云原生,docker,k8s
所以我們可以選擇使用 Docker 來(lái)當(dāng)做 minikube 運(yùn)行的地方,命令:

minikube start --driver='docker’
# 如果你在Docker Desktop版本中使用,建議將 Docke Engine 切換為 Linux的版本
docker context ls
docker context use default

2. 配置

在 k8s 中的核心思想就是:聲明式無(wú)狀態(tài)。
極速上手k8s,Kubernetes 從入門到摸魚系列-實(shí)踐篇,Kubernetes,kubernetes,容器,云原生,docker,k8s
所以當(dāng)我們想通過(guò) API 或 CLI 和 k8s 中主節(jié)點(diǎn)中的 API Server 進(jìn)行通訊的時(shí)候,必須采取一種格式。而 CLI 是使用 YAML 格式來(lái)進(jìn)行的, YAML 對(duì)于后臺(tái)開發(fā)者來(lái)說(shuō)并不陌生,Spring 中的配置文件也是這個(gè)格式。k8s 的 YAML 聲明文件分為三個(gè)部分:1)metadata;2)specification;3)status。
極速上手k8s,Kubernetes 從入門到摸魚系列-實(shí)踐篇,Kubernetes,kubernetes,容器,云原生,docker,k8s

細(xì)心地朋友會(huì)發(fā)現(xiàn),第三個(gè) status 好像并沒有在文件中聲明。這是因?yàn)樗怯?k8s 自動(dòng)生成編輯的。它的主要作用就是,時(shí)刻將容器的現(xiàn)有狀態(tài)(status)與聲明狀態(tài)(specification)相比較,如果發(fā)現(xiàn)有區(qū)別,則會(huì)向聲明狀態(tài)所靠攏。
極速上手k8s,Kubernetes 從入門到摸魚系列-實(shí)踐篇,Kubernetes,kubernetes,容器,云原生,docker,k8s
比如這里在聲明文件中是要兩個(gè) Nginx,但實(shí)際運(yùn)行中發(fā)現(xiàn)只有一個(gè),k8s 發(fā)現(xiàn)后會(huì)主動(dòng)的再創(chuàng)建一個(gè)讓兩者相匹配。status 實(shí)際是由 etcd 進(jìn)行維護(hù)的。

3. 實(shí)例

這個(gè)實(shí)例是一個(gè) Node 應(yīng)用程序,通過(guò)訪問(wèn)MongoDB進(jìn)行數(shù)據(jù)訪問(wèn),部署方式如下所示:
極速上手k8s,Kubernetes 從入門到摸魚系列-實(shí)踐篇,Kubernetes,kubernetes,容器,云原生,docker,k8s
所涉及到的技術(shù)點(diǎn)為:

  • ConfigMap:MongoDB 連接信息
  • Secret:MongoDB 用戶名及密碼
  • Deployment & Service :應(yīng)用組合及服務(wù)

3.1 MongoDB

首先創(chuàng)建 ConfigMap,k8s作為一個(gè)工具類的產(chǎn)品,其實(shí)可以直接仿照官網(wǎng)的例子來(lái)去改寫。
極速上手k8s,Kubernetes 從入門到摸魚系列-實(shí)踐篇,Kubernetes,kubernetes,容器,云原生,docker,k8s
將官網(wǎng)的例子復(fù)制下來(lái),改寫成如下形式:

apiVersion: v1
kind: ConfigMap
metadata:
  name: mongo-config
data:
  mongo-url: mongo-service

然后創(chuàng)建 Secret,這里需要注意的是,Secret 默認(rèn)采用了Opaque 的加密方式。我們的用戶名和密碼需要通過(guò) base64 加密后,粘貼上去。

apiVersion: v1
kind: Secret
metadata:
  name: mongo-secret
type: Opaque
data:
  mongo-user: bW9uZ291c2Vy
  mongo-password: bW9uZ29wYXNzd29yZA==

最后,我們來(lái)聲明 Deployment & Service,這兩個(gè)可以單獨(dú)寫,但也可以寫在一起:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: mongo-deployment
  labels:
    app: mongo
spec:
  replicas: 1
  selector:
    matchLabels:
      app: mongo
  template:
    metadata:
      labels:
        app: mongo
    spec:
      containers:
      - name: mongodb
        image: mongo:5.0
        ports:
        - containerPort: 27017
        env:
        - name: MONGO_INITDB_ROOT_USERNAME
          valueFrom:
            secretKeyRef:
              name: mongo-secret
              key: mongo-user
        - name: MONGO_INITDB_ROOT_PASSWORD
          valueFrom:
            secretKeyRef:
              name: mongo-secret
              key: mongo-password  
---
apiVersion: v1
kind: Service
metadata:
  name: mongo-service
spec:
  selector:
    app: mongo
  ports:
    - protocol: TCP
      port: 27017
      targetPort: 27017

其中的 template 我們第一次見到,它是為了聲明 Pod 的,內(nèi)部也有自己的元數(shù)據(jù)(metadata)和聲明(specification)。這里面最為重要的就是聲明中的容器(containers),其實(shí)可以理解為 docker-compose 中聲明的 image 信息。
labels是一個(gè)標(biāo)簽,k8s 可以為任何組件指定一個(gè)標(biāo)簽,可以作為一個(gè)標(biāo)識(shí)符。比如 Pod 的名字是變化莫測(cè),就可以使用標(biāo)簽(labels)來(lái)快速識(shí)別和尋找特定的組件。
YMAL 語(yǔ)法中,使用---三個(gè)破折號(hào)來(lái)區(qū)分多個(gè)配置文件,所以我們使用破折號(hào)分割后,又聲明了 Service。其中targetPort為 Pod 中聲明的端口,port則可以任意指定未使用的端口。

3.2 Application

如法炮制,我們來(lái)聲明部署應(yīng)用部分。webapp.yaml如下所示:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: webapp-deployment
  labels:
    app: webapp
spec:
  replicas: 1
  selector:
    matchLabels:
      app: webapp
  template:
    metadata:
      labels:
        app: webapp
    spec:
      containers:
      - name: webapp
        image: nanajanashia/k8s-demo-app:v1.0
        ports:
        - containerPort: 3000
        env:
        - name: USER_NAME
          valueFrom:
            secretKeyRef:
              name: mongo-secret
              key: mongo-user
        - name: USER_PWD
          valueFrom:
            secretKeyRef:
              name: mongo-secret
              key: mongo-password 
        - name: DB_URL
          valueFrom:
            configMapKeyRef:
              name: mongo-config
              key: mongo-url
---
apiVersion: v1
kind: Service
metadata:
  name: webapp-service
spec:
  type: NodePort
  selector:
    app: webapp
  ports:
    - protocol: TCP
      port: 3000
      targetPort: 3000
      nodePort: 30100

其中,我們?cè)?APP 的 Service 中聲明了 NodePort,它的作用旨在讓外部瀏覽器訪問(wèn)。nodePort則為該 k8s 節(jié)點(diǎn)中 ip 所綁定的端口,只是它會(huì)有端口范圍的限制。
極速上手k8s,Kubernetes 從入門到摸魚系列-實(shí)踐篇,Kubernetes,kubernetes,容器,云原生,docker,k8s

4. 運(yùn)行

將 YAML 文件寫好后,就可以通過(guò) Kubectl 告訴 k8s 集群,我們要這些服務(wù)組件。首先創(chuàng)建ConfigMap、Securit:

kubectl apply -f mongo-config.yaml
kubectl apply -f mongo-secret.yaml

然后創(chuàng)建MongoDB 和 APP應(yīng)用:

kubectl apply -f mongo.yaml
kubectl apply -f webapp.yaml

極速上手k8s,Kubernetes 從入門到摸魚系列-實(shí)踐篇,Kubernetes,kubernetes,容器,云原生,docker,k8s
執(zhí)行kubectl get all查看當(dāng)前組件狀態(tài):
極速上手k8s,Kubernetes 從入門到摸魚系列-實(shí)踐篇,Kubernetes,kubernetes,容器,云原生,docker,k8s
這里只能看到我們的Deployment、Service、Pod,但配置文件需要單獨(dú)的命令查詢:

kubectl get configmap
kubectl get secret

如果想查看該組件的詳細(xì)信息,則可以使用該命令:

kubectl describe service webapp-service

在Docker中我們經(jīng)常查看容器的Log,在 k8s 中查看 pod 日志的命令:

kubectl logs pod名稱 -f

總之,kubectl 作為 k8s 最強(qiáng)大的交互工具,它所含的命令集非常多,我們也很難全部記住。就像Linux命令一樣,善用-- help~
最后,我們來(lái)訪問(wèn)一下這個(gè) k8s 所部署的應(yīng)用,查詢minikube的ip地址:
極速上手k8s,Kubernetes 從入門到摸魚系列-實(shí)踐篇,Kubernetes,kubernetes,容器,云原生,docker,k8s
可以看到minikube的ip是192.168.64.26,直接訪問(wèn):
極速上手k8s,Kubernetes 從入門到摸魚系列-實(shí)踐篇,Kubernetes,kubernetes,容器,云原生,docker,k8s

5. 總結(jié)

本文我們通過(guò)組合理論篇所學(xué)習(xí)到的組件,通過(guò)一個(gè) Node.js 網(wǎng)頁(yè)應(yīng)用連接 MongoDB 的例子,實(shí)現(xiàn)了在 k8s 中部署使用。雖然在本機(jī)環(huán)境下用 minikube 會(huì)顯得比 Docker Compose 要麻煩的多,但只要我們上了集群,就可以凸顯出 k8s 的強(qiáng)大之處了。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-569941.html

到了這里,關(guān)于極速上手k8s,Kubernetes 從入門到摸魚系列-實(shí)踐篇的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Kubernetes(K8s)從入門到精通系列之五:K8s的基本概念和術(shù)語(yǔ)之應(yīng)用類

    Service: Service指的是無(wú)狀態(tài)服務(wù),通常多個(gè)程序副本提供服務(wù),在特殊情況下也可以是有狀態(tài)的單實(shí)例服務(wù),比如MySQL這種數(shù)據(jù)存儲(chǔ)類的服務(wù)。 K8s里的Service具有一個(gè)全局唯一的虛擬ClusterIP地址,客戶端可以通過(guò)這個(gè)虛擬IP地址+服務(wù)的端口直接訪問(wèn)該服務(wù),再通過(guò)部署K8s集群的

    2024年02月14日
    瀏覽(92)
  • Kubernetes(K8s)從入門到精通系列之四:K8s的基本概念和術(shù)語(yǔ)之集群類

    集群表示一個(gè)由Master和Node組成的K8s集群。 Master指的是集群的控制節(jié)點(diǎn)。 在每個(gè)K8s集群都需要有一個(gè)或一組被稱為Master的節(jié)點(diǎn),來(lái)負(fù)責(zé)整個(gè)集群的管理和控制。 Master通常占據(jù)一個(gè)獨(dú)立的服務(wù)器(在高可用部署中建議至少使用3臺(tái)服務(wù)器),是整個(gè)集群的大腦。 在Master上運(yùn)行以下

    2024年02月15日
    瀏覽(27)
  • Kubernetes(K8s)從入門到精通系列之三:K8s的基本概念和術(shù)語(yǔ)之資源對(duì)象概述

    K8s中的基本概念和術(shù)語(yǔ)大多是圍繞資源對(duì)象(Resource Object)來(lái)說(shuō)的,而資源對(duì)象在總體上可分為以下兩類: 某種資源的對(duì)象,例如節(jié)點(diǎn)(Node)、Pod、服務(wù)(Service)、存儲(chǔ)卷(Volume)。 與資源對(duì)象相關(guān)的事物與動(dòng)作,例如標(biāo)簽(Label)、注解(Annotation)、命名空間(Namespace)、部署(Deployment)、

    2024年02月14日
    瀏覽(110)
  • Kubernetes(K8s)從入門到精通系列之十四:安裝工具

    Kubernetes 命令行工具 kubectl, 讓你可以對(duì) Kubernetes 集群運(yùn)行命令。 你可以使用 kubectl 來(lái)部署應(yīng)用、監(jiān)測(cè)和管理集群資源以及查看日志。 kind 讓你能夠在本地計(jì)算機(jī)上運(yùn)行 Kubernetes。 使用這個(gè)工具需要你安裝 Docker 或者 Podman。 與 kind 類似,minikube 是一個(gè)工具, 能讓你在本地運(yùn)

    2024年02月14日
    瀏覽(46)
  • Kubernetes(K8s)從入門到精通系列之十一:安裝kubeadm

    一臺(tái)兼容的 Linux 主機(jī)。Kubernetes 項(xiàng)目為基于 Debian 和 Red Hat 的 Linux 發(fā)行版以及一些不提供包管理器的發(fā)行版提供通用的指令。 每臺(tái)機(jī)器 2 GB 或更多的 RAM(如果少于這個(gè)數(shù)字將會(huì)影響你應(yīng)用的運(yùn)行內(nèi)存)。 CPU 2 核心及以上。 集群中的所有機(jī)器的網(wǎng)絡(luò)彼此均能相互連接(公網(wǎng)和

    2024年02月14日
    瀏覽(28)
  • Kubernetes(K8s)從入門到精通系列之十三:軟件負(fù)載平衡選項(xiàng)

    當(dāng)設(shè)置具有多個(gè)控制平面的集群時(shí),可以通過(guò)將 API Server 實(shí)例置于負(fù)載均衡器后面并在運(yùn)行 kubeadm init 以便新集群使用它時(shí)使用 --control-plane-endpoint 選項(xiàng)來(lái)實(shí)現(xiàn)更高的可用性。 當(dāng)然,負(fù)載均衡器本身也應(yīng)該具有高可用性。這通常是通過(guò)向負(fù)載均衡器添加冗余來(lái)實(shí)現(xiàn)的。為此,

    2024年02月14日
    瀏覽(21)
  • Kubernetes(K8s)從入門到精通系列之十二:安裝和設(shè)置 kubectl

    Kubernetes 命令行工具 kubectl, 讓你可以對(duì) Kubernetes 集群運(yùn)行命令。 你可以使用 kubectl 來(lái)部署應(yīng)用、監(jiān)測(cè)和管理集群資源以及查看日志。 kubectl 版本和集群版本之間的差異必須在一個(gè)小版本號(hào)內(nèi)。 例如:v1.27 版本的客戶端能與 v1.26、 v1.27 和 v1.28 版本的控制面通信。 用最新兼容

    2024年02月14日
    瀏覽(27)
  • Kubernetes (K8S) 3 小時(shí)快速上手 + 實(shí)踐

    Kubernetes (K8S) 3 小時(shí)快速上手 + 實(shí)踐

    https://k8s.easydoc.net/docs/dRiQjyTY/28366845/6GiNOzyZ/nd7yOvdY#nav_3 2.1.1 憑證問(wèn)題 2.1.2 踩坑 問(wèn)題1:初始化集群控制臺(tái) Control plane 解決: 問(wèn)題2:把工作節(jié)點(diǎn)加入集群(只在工作節(jié)點(diǎn)跑) 只是一個(gè) K8S 集群模擬器,只有一個(gè)節(jié)點(diǎn)的集群,只為測(cè)試用,master 和 worker 都在一起。 2.3.1 安裝(在

    2024年01月18日
    瀏覽(23)
  • Kubernetes(K8s)從入門到精通系列之十:使用 kubeadm 創(chuàng)建一個(gè)高可用 etcd 集群

    Kubernetes(K8s)從入門到精通系列之十:使用 kubeadm 創(chuàng)建一個(gè)高可用 etcd 集群

    默認(rèn)情況下,kubeadm 在每個(gè)控制平面節(jié)點(diǎn)上運(yùn)行一個(gè)本地 etcd 實(shí)例。也可以使用外部的 etcd 集群,并在不同的主機(jī)上提供 etcd 實(shí)例。 可以設(shè)置HA集群: 使用堆疊控制控制平面節(jié)點(diǎn),其中 etcd 節(jié)點(diǎn)與控制平面節(jié)點(diǎn)共存 使用外部 etcd 節(jié)點(diǎn),其中 etcd 在與控制平面不同的節(jié)點(diǎn)上運(yùn)行

    2024年02月14日
    瀏覽(34)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包