侧边栏壁纸
博主头像
码途 博主等级

行动起来,活在当下

  • 累计撰写 72 篇文章
  • 累计创建 0 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录
k8s

Minikube搭建Kubernetes

htmltoo
2023-12-13 / 0 评论 / 0 点赞 / 7 阅读 / 0 字

https://github.com/kubernetes/minikube

https://kubernetes.io/zh/docs/tutorials/hello-minikube/

https://minikube.sigs.k8s.io

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

0

评论区