kind 是 k8s in docker 的缩写
先安装 kind 再安装 kubctl , kubectl 的版本要根据 kind 来决定
和 minikube mricrok8s 相比, kind 节点运行在 docker 里,对宿主机影响比较小可以放心的折腾。 kind 也是 k8s 官方文档里推荐的学习环境之一。
curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.12.0/kind-linux-amd64
chmod +x ./kind
mv ./kind /usr/local/kind
参考 https://kind.sigs.k8s.io/docs/user/quick-start/
查看帮助
kind help
创建集群
kind create cluster # 默认的集群名是 kind
kind create cluster --name kind-2
查看当前的集群
kind get clusters
删除集群
kind delete cluster
kind delete cluster --name kind-2
生成 kubeconfig 文件
kind get kubeconfig --name="kind" > kubeconfig
拉取 kubectl 的镜像
docker pull bitnami/kubectl:1.23
尝试运行
docker run --rm -it \
--network=host \
-v `pwd`/kubeconfig:/.kube/kubeconfig \
bitnami/kubectl:1.23 --kubeconfig=/.kube/kubeconfig \
get nodes
设置别名
alias kubectl="docker run --rm -it --network=host -v /root/kubeconfig:/.kube/kubeconfig bitnami/kubectl:1.23 --kubeconfig=/.kube/kubeconfig"
source ~/.bashrc
之后就可以直接在命令行里使用 kubectl 命令了,但因为使用了容器,如果要上传或下载文件,还是需要用原始的 docker 命令
curl -LO https://dl.k8s.io/release/v1.23.1/bin/linux/amd64/kubectl && \
chmod +x ./kubectl && \
mv ./kubectl /bin/kubectl
使用原生程序,需要把 kubeconfig 复制到 ~/.kube/kubeconfig
删除原本的默认集群,原本的默认集群只有一个 master 节点
kind delete cluster
新建一个集群,集群里有一个 master 节点和一个 worker 节点
新建一个文件 kind-config.yaml
apiVersion: kind.sigs.k8s.io/v1alpha3
kind: Cluster
nodes:
- role: control-plane
- role: worker
运行新建集群的命令
kind create cluster --name kind2 --config=kind-config.yaml
查看集群信息
kubectl cluster-info --context kind-kind-2
查看集群的信息
kubectl cluster-info --context kind-kind # kind-集群名
kubectl cluster-info --context kind-kind-2
查看命令空间
kubectl get namespaces
查看命令空间下的 pods
kubectl -n <namespaces> get pods
查看 pod 信息
kubectl -n <namespaces> describe pod <pod-name>
输出所有 pod 的信息
kubectl get pods --all-namespaces -o json > pod.json
使用 jsonpath
输出所有 pod
kubectl get pods --all-namespaces -o jsonpath='{range .items[*]}{"pod: "}{.metadata.name}{"\n"}{end}'
输出所有 命令空间 pod 容器 和镜像
kubectl get pods --all-namespaces -o jsonpath='{range .items[*]}{.metadata.namespace}{"\t"}{.metadata.name}{"\n"}{range .spec.containers[*]}{"\t"}{.name}{"\t"}{.image}{"\n"}{end}{end}'
复制文件进 pod 的容器里
kubectl -n <namespaces> cp <local-path> <pod-name>:<container-path>
如果 pod 里有多个容器,就需要指定容器名
kubectl -n <namespaces> -c <container-name> cp <local-path> <pod-name>:<container-path>
复制 pod 的文件到本地
kubectl -n <namespaces> cp <pod-name>:<container-path> <local-path>
如果 pod 里有多个容器,就需要指定容器名
kubectl -n <namespaces> -c <container-name> cp <pod-name>:<container-path> <local-path>
在 pod 的容器里执行命令
kubectl -n <namespaces> exec <pod-name> -- <command>
如果 pod 里有多个容器,就需要指定容器名
kubectl -n <namespaces> -c <container-name> exec <pod-name> -- <command>
进入 pod 的容器里
kubectl -n <namespaces> exec -it <pod-name> -- bash
如果 pod 里有多个容器,就需要指定容器名
kubectl -n <namespaces> -c <container-name> exec -it <pod-name> -- bash
下载并运行配置文件
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.5.0/aio/deploy/recommended.yaml
启动代理
kubectl proxy
访问
http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/
如果需要远程访问(假设k8s是部署在远程服务器上,且需要在本地访问)
ssh -o ServerAliveInterval=60 -L localhost:8001:localhost:8001 -NT username@hostname
参考 https://kubernetes.io/docs/tasks/access-application-cluster/web-ui-dashboard/
主要是为了能登入 dashboard
新建 dashboard-adminuser.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
name: admin-user
namespace: kubernetes-dashboard
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: admin-user
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: admin-user
namespace: kubernetes-dashboard
上面那个 yaml 文件,是新建一个 ServiceAccount ,并给这个用户绑定了一个角色
kubectl apply -f dashboard-adminuser.yaml
kubectl -n kubernetes-dashboard get secret $(kubectl -n kubernetes-dashboard get sa/admin-user -o jsonpath="{.secrets[0].name}") -o go-template="{{.data.token | base64decode}}"
参考 https://github.com/kubernetes/dashboard/blob/master/docs/user/access-control/creating-sample-user.md