使用 kind 低成本练习 kubernetes
2020-08-22 tech kubernetes 9 mins 2 图 3364 字
kind 是一个使用 Docker 容器节点运行本地 Kubernetes 集群的工具(CLI)。最近在开发一些周边组件,急需一个集群进行验证,使用kind非常方便。这篇文章记录我使用的步骤。
一、安装
kind 就是一个二进制包,Linux mac Windows都可以快速安装:
Linux
curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.8.1/kind-linux-amd64 chmod +x ./kind mv ./kind /some-dir-in-your-PATH/kind
Mac
brew install kind
或者
curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.8.1/kind-darwin-amd64
Windows
curl.exe -Lo kind-windows-amd64.exe https://kind.sigs.k8s.io/dl/v0.8.1/kind-windows-amd64 Move-Item .\kind-windows-amd64.exe c:\some-dir-in-your-PATH\kind.exe
或者使用 Chocolatey (https://chocolatey.org/packages/kind)
choco install kind
二、使用
使用如下配置文件 kind.yaml
:
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
networking:
# https://kind.sigs.k8s.io/docs/user/configuration/
apiServerAddress: "10.19.0.54"
apiServerPort: 888
nodes:
- role: control-plane
image: kindest/node:v1.17.5@sha256:ab3f9e6ec5ad8840eeb1f76c89bb7948c77bbf76bcebe1a8b59790b8ae9a283a
#featureGates:
# FeatureGateName: true
这个配置文件中,我配置了单节点集群的 IP、apiserver 对外暴露的端口,k8s的版本 v1.17.
image相关信息来这里找:https://github.com/kubernetes-sigs/kind/releases
创建集群:
kind create cluster --config kind.yaml
> kind create cluster
Creating cluster "kind" ...
✓ Ensuring node image (kindest/node:v1.17.5) 🖼
✓ 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 Have a nice day! 👋
如果你集群恰好使用了 同版本的 kubectl,可以使用下面命令行在宿主机快速操作k8s:
kubectl cluster-info --context kind-kind
不同版本的kubectl 会导致意外的。当然,你还有其他方式进行操作:
命令行使用
进入主容器:
docker exec -it kind-control-plane /bin/bash
配置kubectl:
export KUBECONFIG=/etc/kubernetes/admin.conf
可以直接操作了!
ui界面使用(lens)
查看kind的相关命令:
kind -h
kind获得配置:
kind get kubeconfig --name xxx # 如果是默认名字kind,不需要--name
将配置写入lens配置界面配置:
完成!界面如下所示。
获得一个简单容器的 yaml:
kubectl run busybox --image=busybox --restart=Never --dry-run -o yaml -- sleep 1000000 > pod.yaml
得到 pod.yaml :
apiVersion: v1
kind: Pod
metadata:
creationTimestamp: null
labels:
run: busybox
name: busybox
spec:
containers:
- args:
- sleep
- "1000"
image: busybox
imagePullPolicy: IfNotPresent
name: busybox
resources: {}
dnsPolicy: ClusterFirst
restartPolicy: Never
status: {}
运行:
kubectl apply -f pod.yaml
几个常用的yaml备忘
busybox deployment
kind: Deployment
apiVersion: apps/v1
metadata:
name: busybox
spec:
selector:
matchLabels:
app: busybox
replicas: 1
template:
metadata:
labels:
app: busybox
spec:
containers:
- name: busybox
image: busybox
args:
- sleep
- '1000'
resources:
limits:
ephemeral-storage: 40Gi
requests:
ephemeral-storage: 100Mi
nodeName: rqytest1
tolerations:
- key: env
operator: Equal
value: dev
effect: NoSchedule
nginx deployment
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
selector:
matchLabels:
app: nginx
replicas: 2
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
nginx service
kind: Service
apiVersion: v1
metadata:
name: nginx-svc
spec:
ports:
- name: '80'
protocol: TCP
port: 80
targetPort: 80
selector:
app: nginx
type: NodePort