https://github.com/kubernetes/minikube
https://kubernetes.io/zh/docs/tutorials/hello-minikube/
Minikube是Kubernetes社区维护的单机版的Kubernetes集群工具,帮助Kubernetes新手和开发者快速建立本地的Kubernetes集群,降低Kubernetes学习成本。
1.安装
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
install minikube-linux-amd64 /usr/local/bin/minikube
2.创建 Minikube 集群
minikube start
3.集群资源
kubectl get po -A
minikube kubectl -- get po -A
alias kubectl="minikube kubectl --"
-启动仪表板
minikube dashboard
4.部署应用程序
https://minikube.sigs.k8s.io/docs/start/
4.1-Service
kubectl create deployment hello-minikube --image=kicbase/echo-server:1.0
kubectl expose deployment hello-minikube --type=NodePort --port=8080
kubectl get services hello-minikube
minikube service hello-minikube
kubectl port-forward service/hello-minikube 7080:8080
http://g.htmltoo.com:7080
4.2-LoadBalancer
kubectl create deployment balanced --image=kicbase/echo-server:1.0
kubectl expose deployment balanced --type=LoadBalancer --port=8080
minikube tunnel
kubectl get services balanced
http://g.htmltoo.com:8080
4.3-Ingress
Enable ingress addon:
minikube addons enable ingress
https://storage.googleapis.com/minikube-site-examples/ingress-example.yaml
kind: Pod
apiVersion: v1
metadata:
name: foo-app
labels:
app: foo
spec:
containers:
- name: foo-app
image: 'kicbase/echo-server:1.0'
---
kind: Service
apiVersion: v1
metadata:
name: foo-service
spec:
selector:
app: foo
ports:
- port: 8080
---
kind: Pod
apiVersion: v1
metadata:
name: bar-app
labels:
app: bar
spec:
containers:
- name: bar-app
image: 'kicbase/echo-server:1.0'
---
kind: Service
apiVersion: v1
metadata:
name: bar-service
spec:
selector:
app: bar
ports:
- port: 8080
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: example-ingress
spec:
rules:
- http:
paths:
- pathType: Prefix
path: /foo
backend:
service:
name: foo-service
port:
number: 8080
- pathType: Prefix
path: /bar
backend:
service:
name: bar-service
port:
number: 8080
---
kubectl apply -f https://storage.googleapis.com/minikube-site-examples/ingress-example.yaml
kubectl get ingress
NAME CLASS HOSTS ADDRESS PORTS AGE
example-ingress nginx * <your_ip_here> 80 5m45s
curl <ip_from_above>/foo
Request served by foo-app
curl <ip_from_above>/bar
Request served by bar-app
5-管理集群
-Pause Kubernetes without impacting deployed applications
minikube pause
-Unpause a paused instance:
minikube unpause
-Halt the cluster
minikube stop
-Change the default memory limit (requires a restart):
minikube config set memory 9001
-Browse the catalog of easily installed Kubernetes services:
minikube addons list
-Create a second cluster running an older Kubernetes release:
minikube start -p aged --kubernetes-version=v1.16.1
-Delete all of the minikube clusters:
minikube delete --all
6-Deploy applications
6.1-创建 Deployment
Kubernetes Pod 是由一个或多个为了管理和联网而绑定在一起的容器构成的组。本教程中的 Pod 只有一个容器。 Kubernetes Deployment 检查 Pod 的健康状况,并在 Pod 中的容器终止的情况下重新启动新的容器。 Deployment 是管理 Pod 创建和扩展的推荐方法。
6.1.1-使用 kubectl create 命令创建管理 Pod 的 Deployment
kubectl create deployment hello-node --image=registry.k8s.io/e2e-test-images/agnhost:2.39 -- /agnhost netexec --http-port=8080
6.1.2-查看 Deployment
kubectl get deployments
输出结果类似于这样:
NAME READY UP-TO-DATE AVAILABLE AGE
hello-node 1/1 1 1 1m
6.1.3-查看 Pod
kubectl get pods
输出结果类似于这样:
NAME READY STATUS RESTARTS AGE
hello-node-5f76cf6ccf-br9b5 1/1 Running 0 1m
6.1.4-查看集群事件
kubectl get events
6.1.5-查看kubectl配置
kubectl config view
6.1.6-查看 Pod 中容器的应用程序日志
kubectl logs hello-node-5f76cf6ccf-br9b5
输出类似于:
I0911 09:19:26.677397 1 log.go:195] Started HTTP server on port 8080
I0911 09:19:26.677586 1 log.go:195] Started UDP server on port 8081
6.2-创建 Service
默认情况下,Pod 只能通过 Kubernetes 集群中的内部 IP 地址访问。 要使得 hello-node 容器可以从 Kubernetes 虚拟网络的外部访问,你必须将 Pod 暴露为 Kubernetes Service。
6.2.1-使用 kubectl expose 命令将 Pod 暴露给公网
kubectl expose deployment hello-node --type=LoadBalancer --port=8080
这里的 --type=LoadBalancer 参数表明你希望将你的 Service 暴露到集群外部。
测试镜像中的应用程序代码仅监听 TCP 8080 端口。 如果你用 kubectl expose 暴露了其它的端口,客户端将不能访问其它端口。
6.2.2-查看你创建的 Service
kubectl get services
输出结果类似于这样:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
hello-node LoadBalancer 10.108.144.78 <pending> 8080:30369/TCP 21s
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 23m
对于支持负载均衡器的云服务平台而言,平台将提供一个外部 IP 来访问该服务。 在 Minikube 上,LoadBalancer 使得服务可以通过命令 minikube service 访问
6.2.3-运行下面的命令
minikube service hello-node
这将打开一个浏览器窗口,为你的应用程序提供服务并显示应用的响应
6.3-启用插件
6.3.1-列出当前支持的插件
minikube addons list
6.3.2-启用插件
minikube addons enable metrics-server
6.3.3-查看通过安装该插件所创建的 Pod 和 Service
kubectl get pod,svc -n kube-system
输出结果类似于这样:
NAME READY STATUS RESTARTS AGE
pod/coredns-5644d7b6d9-mh9ll 1/1 Running 0 34m
pod/coredns-5644d7b6d9-pqd2t 1/1 Running 0 34m
pod/metrics-server-67fb648c5 1/1 Running 0 26s
pod/etcd-minikube 1/1 Running 0 34m
pod/influxdb-grafana-b29w8 2/2 Running 0 26s
pod/kube-addon-manager-minikube 1/1 Running 0 34m
pod/kube-apiserver-minikube 1/1 Running 0 34m
pod/kube-controller-manager-minikube 1/1 Running 0 34m
pod/kube-proxy-rnlps 1/1 Running 0 34m
pod/kube-scheduler-minikube 1/1 Running 0 34m
pod/storage-provisioner 1/1 Running 0 34m
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/metrics-server ClusterIP 10.96.241.45 <none> 80/TCP 26s
service/kube-dns ClusterIP 10.96.0.10 <none> 53/UDP,53/TCP 34m
service/monitoring-grafana NodePort 10.99.24.54 <none> 80:30002/TCP 26s
service/monitoring-influxdb ClusterIP 10.111.169.94 <none> 8083/TCP,8086/TCP 26s
6.3.4-禁用 metrics-server
minikube addons disable metrics-server
6.4-清理
-现在可以清理你在集群中创建的资源
kubectl delete service hello-node
kubectl delete deployment hello-node
-停止 Minikube 集群:
minikube stop
-删除 Minikube 虚拟机(VM)
minikube delete
评论区