[雲端] K8s / env / Kind === ###### tags: `雲端 / K8s` ###### tags: `雲端`, `K8s`, `Kind` <br> ![](https://i.imgur.com/vsCp0RX.png =20%x) ![](https://i.imgur.com/ZoNoCG7.png =197x119)<br><br> [TOC] <br> ## 官方文件 ### 何謂 kind > kind is a tool for running local Kubernetes clusters using Docker container “nodes”. > kind was primarily designed for testing Kubernetes itself, but may be used for local development or CI. > > kind 是一種使用 Docker 容器 "nodes" 執行本地端 Kubenetes 叢集的工具。 > kind 主要是為了測試 Kubernetes 本身而設計的,但可能用於本地開發或CI。 ### Quick Start - https://kind.sigs.k8s.io/docs/user/quick-start ### GitHub - https://github.com/kubernetes-sigs/kind <br> ## 安裝 kind ### 要先安裝 go - [How To Install Go 1.13 on Ubuntu 18.04 & 16.04 LTS](https://tecadmin.net/install-go-on-ubuntu/) :::warning :warning: **在安裝前,請先看下面的設定** - 安裝 kind 會遇到 permission denied ``` $ GO111MODULE="on" go get sigs.k8s.io/kind@v0.8.1 warning: GOPATH set to GOROOT (/usr/local/go) has no effect go: finding sigs.k8s.io v0.8.1 go: finding sigs.k8s.io/kind v0.8.1 go: writing stat cache: mkdir /usr/local/go/pkg/mod: permission denied go: downloading sigs.k8s.io/kind v0.8.1 go get sigs.k8s.io/kind@v0.8.1: mkdir /usr/local/go/pkg/mod: permission denied ``` - 把 go 搬到自己的目錄下 - go 預設是 root:root,切換成目前 user 如下: ```sudo chown $(id -u):$(id -g) go/ -R``` - 注意 GOROOT, GOPATH, PATH 的設定 <br> - GOPATH :::danger :warning: **注意 GOPATH 路徑** > **GOPATH is the location of your work directory. For example my project directory is ~/Projects/Proj1 .** ::: e.g. ```$ export GOPATH=/home/tj/Asus/software/kind``` <br> - debug ```bash ~/Asus/software/go$ go env warning: GOPATH set to GOROOT (/home/tj/Asus/software/go) has no effect GO111MODULE="" ... GOPATH="/home/tj/Asus/software/kind" ... GOROOT="/home/tj/Asus/software/go" ... ``` ::: ### 再安裝 kind ```bash GO111MODULE="on" go get sigs.k8s.io/kind@v0.8.1 ``` ```bash $ kind version kind v0.8.1 go1.13.3 linux/amd64 ``` ## 建立叢集 - 準備檔案:```kind-esccluster.yaml``` ```yaml apiVersion: kind.x-k8s.io/v1alpha4 kind: Cluster # 1 control plane node and 2 workers nodes: # the control plane node config - role: control-plane extraPortMappings: - hostPort: 8008 containerPort: 8008 # the two workers - role: worker extraPortMappings: - hostPort: 31001 containerPort: 31001 - role: worker ``` ### 建立叢集 ```bash $ kind create cluster --name tj-cluster --config kind-tj-cluster.yaml ``` :::warning :warning: **錯誤排除** ```bash $ kind create cluster --name tj-cluster --config kind-tj-cluster.yaml Creating cluster "tj-cluster" ... ERROR: failed to create cluster: failed to ensure docker network: command "docker network create -d=bridge --ipv6 --subnet fc00:8866:27d0:bd7e::/64 kind" failed with error: exit status 1 Command Output: Error response from daemon: could not find an available, non-overlapping IPv4 address pool among the defaults to assign to the network ``` - 先關掉內網 - 正常會是 ``` $ docker network create -d=bridge --ipv6 --subnet fc00:8866:27d0:bd7e::/64 kind 8005fb07287f20474bdde82ad0bc303fd4d80bb89a334d07a141cf3e1072a64e ``` ::: ### 列出叢集 ```bash $ kind get clusters ``` ### 刪除叢集 (測試完後可執行刪除) ``` $ kind delete cluster --name tj-cluster ``` ### k8s ```bash $ kubectl cluster-info --context kind-tj-cluster Kubernetes master is running at https://127.0.0.1:34925 KubeDNS is running at https://127.0.0.1:34925/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'. ``` ```bash $ kubectl get componentstatuses NAME STATUS MESSAGE ERROR controller-manager Healthy ok scheduler Healthy ok etcd-0 Healthy {"health":"true"} ``` ```bash $ kubectl get nodes NAME STATUS ROLES AGE VERSION tj-cluster-control-plane Ready master 7m56s v1.18.2 tj-cluster-worker Ready <none> 7m21s v1.18.2 tj-cluster-worker2 Ready <none> 7m21s v1.18.2 ``` ```bash $ kubectl get pods --all-namespaces NAMESPACE NAME READY STATUS RESTARTS AGE kube-system coredns-66bff467f8-rc79b 1/1 Running 0 8m4s kube-system coredns-66bff467f8-zvxnj 1/1 Running 0 8m4s kube-system etcd-tj-cluster-control-plane 1/1 Running 0 8m23s kube-system kindnet-9m9fk 1/1 Running 0 8m4s kube-system kindnet-spf42 1/1 Running 0 7m47s kube-system kindnet-z5xvl 1/1 Running 0 7m48s kube-system kube-apiserver-tj-cluster-control-plane 1/1 Running 0 8m23s kube-system kube-controller-manager-tj-cluster-control-plane 1/1 Running 0 8m22s kube-system kube-proxy-77gkl 1/1 Running 0 7m48s kube-system kube-proxy-cfnzq 1/1 Running 0 8m4s kube-system kube-proxy-g85v2 1/1 Running 0 7m47s kube-system kube-scheduler-tj-cluster-control-plane 1/1 Running 0 8m22s local-path-storage local-path-provisioner-bd4bb6b75-wtpvs 1/1 Running 0 8m4s ``` <br> # 安裝環境:OracleVM ## OS 版本 - ubuntu-18.04.4-live-server-amd64.iso (913MB) - **kind(k8s: master x1, workers x2) 基本要求** - RAM: 1.3GB (可配置 1536 MB) - CPU: 至少要 ==2 顆==,否則 kubelet 會啟動失敗 ![](https://i.imgur.com/jIFU5tD.png) ## 測試套件 - docker: 18.09.7 - go: go version go1.13.3 linux/amd64 - kind: kind v0.8.1 go1.13.3 linux/amd64 ## 所需記憶體 - 約 1.3GB (=6.1-4.9) ![](https://i.imgur.com/u0QW8i5.png) ## 參考資料 - [Quick Start](https://kind.sigs.k8s.io/docs/user/quick-start) - [Simple way to create kubernetes cluster locally using kind.](https://itnext.io/simple-way-to-create-kubernetes-cluster-locally-using-kind-fb8f0f75e372)