0 - 創建cluster
啓動 Minikube 並創建一個集羣
minikube start
命令將創建並配置一臺虛擬機,使其運行單節點 Kubernetes 集羣,並且配置 kubectl 安裝,以便使其能與 Kubernetes 集羣正確通信。
[anliven@anliven ~]$ minikube start
* minikube v1.14.0 on Centos 7.8.2003 (vbox/amd64)
* Using the docker driver based on existing profile
* Starting control plane node minikube in cluster minikube
* Restarting existing docker container for "minikube" ...
* Preparing Kubernetes v1.19.2 on Docker 19.03.8 ...
* Verifying Kubernetes components...
* Enabled addons: default-storageclass, storage-provisioner
* Done! kubectl is now configured to use "minikube" by default
[anliven@anliven ~]$
1 - 創建 Deployment
Kubernetes Pod 是由一個或多個 爲了管理和聯網而綁定在一起的容器構成的組。
Kubernetes Deployment 檢查 Pod 的健康狀況,並在 Pod 中的容器終止的情況下重新啓動新的容器。
Deployment 是管理 Pod 創建和擴展的推薦方法。
使用名爲 echoserver(一個簡單的 HTTP 服務器。) 的鏡像創建一個 Kubernetes Deployment
[anliven@anliven ~]$ kubectl create deployment hello-node --image=k8s.gcr.io/echoserver:1.4 # 創建管理 Pod 的 Deployment, Pod 根據提供的 Docker 鏡像運行 Container
deployment.apps/hello-node created
[anliven@anliven ~]$
[anliven@anliven ~]$ kubectl get deployments # 查看 Deployment
NAME READY UP-TO-DATE AVAILABLE AGE
hello-node 1/1 1 1 36s
[anliven@anliven ~]$
[anliven@anliven ~]$ kubectl get pods # 查看 Pod
NAME READY STATUS RESTARTS AGE
hello-node-7567d9fdc9-prltr 1/1 Running 0 51s
[anliven@anliven ~]$
[anliven@anliven ~]$ kubectl get events # 查看集羣事件
LAST SEEN TYPE REASON OBJECT MESSAGE
73s Normal Scheduled pod/hello-node-7567d9fdc9-prltr Successfully assigned default/hello-node-7567d9fdc9-prltr to minikube
71s Normal Pulling pod/hello-node-7567d9fdc9-prltr Pulling image "k8s.gcr.io/echoserver:1.4"
43s Normal Pulled pod/hello-node-7567d9fdc9-prltr Successfully pulled image "k8s.gcr.io/echoserver:1.4" in 28.355837001s
43s Normal Created pod/hello-node-7567d9fdc9-prltr Created container echoserver
43s Normal Started pod/hello-node-7567d9fdc9-prltr Started container echoserver
73s Normal SuccessfulCreate replicaset/hello-node-7567d9fdc9 Created pod: hello-node-7567d9fdc9-prltr
73s Normal ScalingReplicaSet deployment/hello-node Scaled up replica set hello-node-7567d9fdc9 to 1
35m Normal Starting node/minikube Starting kubelet.
35m Normal NodeHasSufficientMemory node/minikube Node minikube status is now: NodeHasSufficientMemory
35m Normal NodeHasNoDiskPressure node/minikube Node minikube status is now: NodeHasNoDiskPressure
35m Normal NodeHasSufficientPID node/minikube Node minikube status is now: NodeHasSufficientPID
35m Normal NodeAllocatableEnforced node/minikube Updated Node Allocatable limit across pods
35m Normal Starting node/minikube Starting kube-proxy.
35m Normal RegisteredNode node/minikube Node minikube event: Registered Node minikube in Controller
[anliven@anliven ~]$
[anliven@anliven ~]$ kubectl config view # 查看 kubectl 配置
apiVersion: v1
clusters:
- cluster:
certificate-authority: /home/anliven/.minikube/ca.crt
server: https://192.168.49.2:8443
name: minikube
contexts:
- context:
cluster: minikube
user: minikube
name: minikube
current-context: minikube
kind: Config
preferences: {}
users:
- name: minikube
user:
client-certificate: /home/anliven/.minikube/profiles/minikube/client.crt
client-key: /home/anliven/.minikube/profiles/minikube/client.key
[anliven@anliven ~]$
2 - 創建 Service
默認情況下,Pod 只能通過 Kubernetes 集羣中的內部 IP 地址訪問。
要使得容器可以從 Kubernetes 虛擬網絡的外部訪問,必須將 Pod 暴露爲 Kubernetes Service。
[anliven@anliven ~]$ kubectl expose deployment hello-node --type=LoadBalancer --port=8080 # 將 Pod 暴露給公網, --type=LoadBalancer 標誌表明將 Service 暴露到集羣外部
service/hello-node exposed
[anliven@anliven ~]$
[anliven@anliven ~]$ kubectl get services # 查看創建的 Service
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
hello-node LoadBalancer 10.109.212.214 <pending> 8080:32765/TCP 15s
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 5h31m
[anliven@anliven ~]$
[anliven@anliven ~]$ minikube service list
|----------------------|---------------------------|--------------|---------------------------|
| NAMESPACE | NAME | TARGET PORT | URL |
|----------------------|---------------------------|--------------|---------------------------|
| default | hello-node | 8080 | http://192.168.49.2:32765 |
| default | kubernetes | No node port |
| kube-system | kube-dns | No node port |
| kubernetes-dashboard | dashboard-metrics-scraper | No node port |
| kubernetes-dashboard | kubernetes-dashboard | No node port |
|----------------------|---------------------------|--------------|---------------------------|
[anliven@anliven ~]$
運行minikube service hello-node
命令: 在 Minikube 上,LoadBalancer 使得服務可以通過命令 minikube service 訪問。
3 - 啓用插件
Minikube 有一組內置的 插件, 可以在本地 Kubernetes 環境中啓用、禁用和打開。
[anliven@anliven ~]$ minikube addons list # 列出當前支持的插件
|-----------------------------|----------|--------------|
| ADDON NAME | PROFILE | STATUS |
|-----------------------------|----------|--------------|
| ambassador | minikube | disabled |
| csi-hostpath-driver | minikube | disabled |
| dashboard | minikube | enabled ✅ |
| default-storageclass | minikube | enabled ✅ |
| efk | minikube | disabled |
| freshpod | minikube | disabled |
| gcp-auth | minikube | disabled |
| gvisor | minikube | disabled |
| helm-tiller | minikube | disabled |
| ingress | minikube | disabled |
| ingress-dns | minikube | disabled |
| istio | minikube | disabled |
| istio-provisioner | minikube | disabled |
| kubevirt | minikube | disabled |
| logviewer | minikube | disabled |
| metallb | minikube | disabled |
| metrics-server | minikube | disabled |
| nvidia-driver-installer | minikube | disabled |
| nvidia-gpu-device-plugin | minikube | disabled |
| olm | minikube | disabled |
| pod-security-policy | minikube | disabled |
| registry | minikube | disabled |
| registry-aliases | minikube | disabled |
| registry-creds | minikube | disabled |
| storage-provisioner | minikube | enabled ✅ |
| storage-provisioner-gluster | minikube | disabled |
| volumesnapshots | minikube | disabled |
|-----------------------------|----------|--------------|
[anliven@anliven ~]$
[anliven@anliven ~]$ minikube addons enable metrics-server # 啓用插件
* The 'metrics-server' addon is enabled
[anliven@anliven ~]$
[anliven@anliven ~]$ minikube addons list |grep metrics # 查看狀態
| metrics-server | minikube | enabled ✅ |
[anliven@anliven ~]$
[anliven@anliven ~]$ kubectl get pod,svc -n kube-system # 查看創建的 Pod 和 Service
NAME READY STATUS RESTARTS AGE
pod/coredns-f9fd979d6-vzcjl 1/1 Running 1 6h1m
pod/etcd-minikube 1/1 Running 1 6h1m
pod/kube-apiserver-minikube 1/1 Running 1 6h1m
pod/kube-controller-manager-minikube 1/1 Running 1 6h1m
pod/kube-proxy-c7hwx 1/1 Running 1 6h1m
pod/kube-scheduler-minikube 1/1 Running 1 6h1m
pod/metrics-server-d9b576748-5mh9l 1/1 Running 0 40s # 剛剛創建的metrics-server
pod/storage-provisioner 1/1 Running 2 6h1m
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kube-dns ClusterIP 10.96.0.10 <none> 53/UDP,53/TCP,9153/TCP 6h1m
service/metrics-server ClusterIP 10.103.101.207 <none> 443/TCP 40s # 剛剛創建的metrics-server
[anliven@anliven ~]$
[anliven@anliven ~]$ minikube addons disable metrics-server # 禁用插件
* "The 'metrics-server' addon is disabled
[anliven@anliven ~]$
[anliven@anliven ~]$ minikube addons list |grep metrics # 查看狀態
| metrics-server | minikube | disabled |
[anliven@anliven ~]$
[anliven@anliven ~]$ kubectl get pod,svc -n kube-system
NAME READY STATUS RESTARTS AGE
pod/coredns-f9fd979d6-vzcjl 1/1 Running 1 6h4m
pod/etcd-minikube 1/1 Running 1 6h4m
pod/kube-apiserver-minikube 1/1 Running 1 6h4m
pod/kube-controller-manager-minikube 1/1 Running 1 6h4m
pod/kube-proxy-c7hwx 1/1 Running 1 6h4m
pod/kube-scheduler-minikube 1/1 Running 1 6h4m
pod/storage-provisioner 1/1 Running 2 6h4m
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kube-dns ClusterIP 10.96.0.10 <none> 53/UDP,53/TCP,9153/TCP 6h4m
[anliven@anliven ~]$
4 - 清理
清理在集羣中創建的資源。
[anliven@anliven ~]$ kubectl get service # 查看Service
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
hello-node LoadBalancer 10.109.212.214 <pending> 8080:32765/TCP 50m
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 6h21m
[anliven@anliven ~]$
[anliven@anliven ~]$ kubectl get deployment # 查看deployment
NAME READY UP-TO-DATE AVAILABLE AGE
hello-node 1/1 1 1 85m
[anliven@anliven ~]$
[anliven@anliven ~]$
[anliven@anliven ~]$ kubectl delete service hello-node # 清除服務
service "hello-node" deleted
[anliven@anliven ~]$
[anliven@anliven ~]$ kubectl get service
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 6h22m
[anliven@anliven ~]$
[anliven@anliven ~]$ kubectl delete deployment hello-node # 清除deployment
deployment.apps "hello-node" deleted
[anliven@anliven ~]$
[anliven@anliven ~]$ kubectl get deployment
No resources found in default namespace.
[anliven@anliven ~]$
停止和刪除Minikube 集羣
[anliven@anliven ~]$ docker ps -a |grep minikube # 查看Minikube 集羣狀態
3e7356dd380b gcr.io/k8s-minikube/kicbase:v0.0.13 "/usr/local/bin/entr…" 5 minutes ago Up 41 seconds 127.0.0.1:32787->22/tcp, 127.0.0.1:32786->2376/tcp, 127.0.0.1:32785->5000/tcp, 127.0.0.1:32784->8443/tcp minikube
[anliven@anliven ~]$
[anliven@anliven ~]$ minikube stop # 停止Minikube 集羣
* Stopping node "minikube" ...
* Powering off "minikube" via SSH ...
* 1 nodes stopped.
[anliven@anliven ~]$
[anliven@anliven ~]$ docker ps -a |grep minikube
3e7356dd380b gcr.io/k8s-minikube/kicbase:v0.0.13 "/usr/local/bin/entr…" 7 minutes ago Exited (130) 4 seconds ago minikube
[anliven@anliven ~]$
[anliven@anliven ~]$ minikube status
minikube
type: Control Plane
host: Stopped
kubelet: Stopped
apiserver: Stopped
kubeconfig: Stopped
[anliven@anliven ~]$
[anliven@anliven ~]$ minikube delete # 刪除 Minikube 集羣
* Deleting "minikube" in docker ...
* Deleting container "minikube" ...
* Removing /home/anliven/.minikube/machines/minikube ...
* Removed all traces of the "minikube" cluster.
[anliven@anliven ~]$
[anliven@anliven ~]$ docker ps -a |grep minikube
[anliven@anliven ~]$
[anliven@anliven ~]$ docker images |grep k8s # 查看Minikube 集羣的鏡像
gcr.io/k8s-minikube/kicbase v0.0.13 90f1294ff9ac 2 weeks ago 800MB
[anliven@anliven ~]$