中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么搭建本地K8s開發環境

發布時間:2021-06-28 17:58:55 來源:億速云 閱讀:273 作者:chen 欄目:系統運維

這篇文章主要介紹“怎么搭建本地K8s開發環境”,在日常操作中,相信很多人在怎么搭建本地K8s開發環境問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”怎么搭建本地K8s開發環境”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

一、依賴檢查

開始之前需要先檢查一下

1.是否已經安裝好了 Docker 環境

  • 如果還沒安裝 Mac/Windows 的用戶可以直接安裝 Docker Desktop

  • Windows 用戶推薦使用 WSL2

2.是否已經安裝好了 Golang 環境, Go 版本最好 >= 1.15

  • 如果沒有可以參考官方文檔進行安裝

二、使用 Kind 搭建本地開發環境

2.1 安裝

如果本地存在 Golang 環境可以直接執行下方命令進行安裝

GO111MODULE="on" go get sigs.k8s.io/kind@v0.10.0 && kind create cluster

如果不想通過源碼安裝可以查看官方文檔直接安裝編譯好的二進制文件

執行下方命令可以輸出 kind 的版本就表示安裝好了

? kind version kind v0.10.0 go1.16 linux/amd64

2.2 創建一個 K8s 集群

使用下方命令即可創建一個簡單的單節點 K8s 集群

node create clutser

集群的創建時間和你的網絡環境以及機器的性能有關系,kind 會去 docker hub 上拉取 kindest/node 鏡像,這個鏡像大概有 400M  的大小,當出現下方的提示的時候就說明集群創建好了

? kind create cluster Creating cluster "kind" ...  ? Ensuring node image (kindest/node:v1.20.2) ?  ? Preparing nodes ?  ? Writing configuration ?  ? Starting control-plane ??  ? Installing CNI ?  ? Installing StorageClass ? Set kubectl context to "kind-kind" You can now use your cluster with:  kubectl cluster-info --context kind-kind  Thanks for using kind! ?

我們可以使用 kind get clusters 獲取我們創建的集群列表,kind 支持創建多個集群,不手動指定集群名稱的時候默認名為 kind  ,我們也可以像下面一樣在創建集群的時候使用 --name 指定集群名稱

kind create cluster --name mohuishou

可以看到我們兩個集群都創建好了

? kind get clusters kind mohuishou

現在我們只需要一個集群,所以可以先使用 kind delete clusters mohuishou 將剛剛創建的集群先刪除掉

2.3 使用集群

下面我們來看一下 kubectl 的常用命令是否都可以正常使用,并且部署一個簡單的 web 服務試試

查看集群信息

? kubectl  cluster-info --context kind-kind Kubernetes master is running at https://127.0.0.1:41801 KubeDNS is running at https://127.0.0.1:41801/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy  To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.

可以看到我們 k8s master 地址和 dns 的地址,注意一般情況下我們只創建一個集群不需要指定 --context cluster name  但是創建了多個集群時這個基本就是必須的一個命令了。如果不加這個參數可能會報下面的錯誤

The connection to the server localhost:8080 was refused - did you specify the right host or port?

這是因為 kubectl默認連接的 apiserver 地址是 localhost:8080但是我們的 apiserver 地址不是這個所以報錯。

為什么我們使用 --context cluster-name 就可以了呢?

這是因為 kind 在創建集群的時候會修改 $HOME/.kube/config 的配置,將集群的 apiserver  地址,證書等相關信息都自動寫入進去了

每次命令都要加上這個參數好麻煩怎么辦?

我們可以使用 kubectl config use-context context-name 來進行設置,設置好了之后我們后續就不用每次都加上  –context 的參數了,同時還可以通過 kubectl config current-context 查詢我們當前默認操作的集群是哪一個

查看集群節點列表

可以發現我們部署的是一個單節點的 v1.20.2 的集群

? kubectl get no NAME                 STATUS   ROLES                  AGE   VERSION kind-control-plane   Ready    control-plane,master   20m   v1.20.2

部署一個 Nginx 服務

使用下方代碼創建一個 nginx.yml 文件,然后使用 kubectl apply -f nginx.yml 就可以完成部署了

apiVersion: apps/v1 kind: Deployment metadata:   name: nginx-deployment   labels:     app: nginx spec:   replicas: 3   selector:     matchLabels:       app: nginx   template:     metadata:       labels:         app: nginx     spec:       containers:         - name: nginx           image: nginx:1.14.2           ports:             - containerPort: 80

查看當前 deployment 的狀態

? kubectl get deployment NAME               READY   UP-TO-DATE   AVAILABLE   AGE nginx-deployment   0/3     3            0           39s

查看 pod 的狀態

? kubectl get pods          NAME                                READY   STATUS    RESTARTS   AGE nginx-deployment-66b6c48dd5-2s5cb   1/1     Running   0          84s nginx-deployment-66b6c48dd5-8wf8b   1/1     Running   0          84s nginx-deployment-66b6c48dd5-zc6vd   1/1     Running   0          84s

由于我們沒有做服務暴露,所以是不能直接訪問對應的服務的,我們可以用 kubectl提供的端口轉發功能來講流量從本地轉發給 k8s 集群

? kubectl port-forward nginx-deployment-66b6c48dd5-2s5cb 30080:80 Forwarding from 127.0.0.1:30080 -> 80 Forwarding from [::1]:30080 -> 80 Handling connection for 30080

我們訪問 http://localhost:30080 就會發現這個熟悉的 nginx 界面

怎么搭建本地K8s開發環境

image-20210424210804343

到這里可以發現我們集群已經是可以使用了

2.4 進階使用

2.4.1 創建一個多節點的集群

kind 默認創建的是一個單節點的集群,我們可以通過修改配置創建一個高可用的集群,我們創建一個 3 個 master 節點,兩個 worker  節點的集群

  1. kind create cluster --name mohuishou-ha --config kind-ha.yml 


kind: Cluster apiVersion: kind.x-k8s.io/v1alpha4 nodes:   - role: control-plane   - role: control-plane   - role: control-plane   - role: worker   - role: worker

看一下節點即可驗證

? kubectl --context kind-mohuishou-ha get no                  NAME                          STATUS   ROLES                  AGE     VERSION mohuishou-ha-control-plane    Ready    control-plane,master   16m     v1.20.2 mohuishou-ha-control-plane2   Ready    control-plane,master   14m     v1.20.2 mohuishou-ha-control-plane3   Ready    control-plane,master   13m     v1.20.2 mohuishou-ha-worker           Ready    <none>                 5m52s   v1.20.2 mohuishou-ha-worker2          Ready    <none>                 5m52s   v1.20.2

2.4.2 Load Image

一般來說我們在 k8s  內部署應用需要先把容器鏡像推送到到鏡像倉庫當中,這樣在本地開發的時候相對來說會比較麻煩,特別是鏡像比較大的時候,往返會有兩次網絡消耗,為了解決這個問題我們可以使用  kind load 鏡像的功能直接把鏡像。

kind load docker-image my-custom-image-0 my-custom-image-1 --name kind

排坑指南:load image 成功,但是部署 pod 報錯

Failed to pull image "controller:latest": rpc error: code = Unknown desc = failed to pull and unpack image "docker.io/library/controller:latest": failed to resolve reference "docker.io/library/controller:latest": pull access denied, repository does not exist or may require authorization: server message: insufficient_scope: authorization failed

這個問題之前卡了我很久,還是有點坑

1.進入節點查看: 鏡像是否存在

  • 獲取節點名

? kubectl get nodes NAME                 STATUS   ROLES                  AGE    VERSION kind-control-plane   Ready    control-plane,master   2d1h   v1.20.2
  • 進入終端

docker exec -it kind-control-plane bash
  • 查看鏡像是否存在,kind 創建的集群使用的是 containerd 所以我們使用 crictl 命令來獲取

crictl img | grep controller docker.io/library/controller   latest    421cbf77618ba       72.1MB

2.如果鏡像存在,也就是我們上面看到的情況,這時候就要檢查一下我們部署的 yaml 文件

kubectl -n node-pool-operator-system  get deployment -o yaml | grep imagePullPolicy

是否存在: imagePullPolicy: Always 如果我們沒有改 yaml 的話默認會是這個配置,這個配置會導致每次都去鏡像倉庫拉取鏡像,改成  imagePullPolicy: IfNotPresent 就可以了

3.如果鏡像不存在:這時候要檢查一下有沒有指定 cluster-name,在存在多個集群的情況下可能沒有加載到我們想要的集群,加上 --name  cluster-name 即可

總結

kind 在創建集群的時候實際上使用的是 kubeadm 所以還可以修改 kubeadm  的配置來修改默認的鏡像地址,節點標簽污點等信息,除此之外還可以配置 PV/PVC CNI 插件等配置,如果有需求的話可以查閱 kind 的官方文檔

不過要注意的是 kind 不支持給運行的集群添加節點,如果需要多節點集群的話得提前規劃好節點數量

到此,關于“怎么搭建本地K8s開發環境”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

k8s
AI

乌审旗| 陆河县| 腾冲县| 马鞍山市| 剑河县| 隆昌县| 宜宾市| 彭山县| 仙居县| 鲜城| 綦江县| 项城市| 廊坊市| 五家渠市| 阳朔县| 大石桥市| 凤庆县| 运城市| 杭锦旗| 奉节县| 长白| 东平县| 高雄县| 黄石市| 英吉沙县| 濮阳市| 蓝山县| 合阳县| 湟中县| 北宁市| 连山| 黄平县| 固始县| 溧水县| 玉门市| 防城港市| 洛阳市| 新乐市| 新邵县| 泰来县| 普宁市|