K8S minikube本地安装

一. mac安装K8S

1.brew安装

brew install kubectl

2.查看版本

kubectl version --output=json

{
  "clientVersion": {
    "major": "1",
    "minor": "27",
    "gitVersion": "v1.27.2",
    "gitCommit": "7f6f68fdabc4df88cfea2dcf9a19b2b830f1e647",
    "gitTreeState": "clean",
    "buildDate": "2023-05-17T14:13:27Z",
    "goVersion": "go1.20.4",
    "compiler": "gc",
    "platform": "darwin/amd64"
  },
  "kustomizeVersion": "v5.0.1"
}

The connection to the server 127.0.0.1:6443 was refused - did you specify the right host or port?

还没有在本地运行k8s集群

二. 安装minikube

2.1 brew install安装minikube

brew install minikube

2.2 minikube开启k8s

minikube start

2.3 kubectl命令查看相关信息

kubectl cluster-info

查看pods 

kubectl get po -A
NAMESPACE     NAME                               READY   STATUS    RESTARTS      AGE
kube-system   coredns-787d4945fb-97qlx           1/1     Running   0             13m
kube-system   etcd-minikube                      1/1     Running   0             13m
kube-system   kube-apiserver-minikube            1/1     Running   0             13m
kube-system   kube-controller-manager-minikube   1/1     Running   0             13m
kube-system   kube-proxy-kvcj7                   1/1     Running   0             13m
kube-system   kube-scheduler-minikube            1/1     Running   0             13m
kube-system   storage-provisioner                1/1     Running   1 (13m ago)   13m

查看node信息

kubectl get nodes
NAME       STATUS   ROLES           AGE   VERSION
minikube   Ready    control-plane   16m   v1.26.3

2.4 开启dashboard

minikube dashboard

http://127.0.0.1:62643/api/v1/namespaces/kubernetes-dashboard/services/http:kubernetes-dashboard:/proxy/#/workloads?namespace=default

 

三. minikube常用命令

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

四. 通过deployment部署pod

4.1  查看创建namespace

kubectl create namespace dev

kubectl get namespaces
#显示如下
NAME                   STATUS   AGE
dev                    Active   2s

4.2 配置yaml文件

# deploy-mydemo.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-golang-app-demo
  namespace: dev
spec:
  replicas: 2
  selector:
    matchLabels:
      app: my-golang-app-demo
  template:
    metadata:
      labels:
        app: my-golang-app-demo
    spec:
      containers:
        - image: my-golang-app:latest
          name: my-golang-app-demo
          ports:
            - name: port1
              containerPort: 8991
              protocol: TCP
            - name: port2
              containerPort: 8992
              protocol: TCP

4.3 创建deployment

kubectl apply -f deploy-mydemo.yaml

查看pod启动情况

kubectl -n dev get pods

k8s中,大部分的问题,都能通过logsdescribe两个命令进行分析和定位

发现并没有启动起来,查看日志镜像没有拉取成功

kubectl -n dev logs my-golang-app-demo-869787c5dc-fzjrn
Error from server (BadRequest): container "my-golang-app-demo" in pod "my-golang-app-demo-869787c5dc-fzjrn" is waiting to start: trying and failing to pull image

原因是k8s默认去仓库拉取镜像,我没有上传镜像,上传镜像到docker hub中后,再次启动成功运行pod

这里记录一个删除deployment的命令

kubectl delete deployment my-golang-app-demo -n dev

可以看到运行起来了

查看deployment状态

kubectl get deployment -n dev my-golang-app-demo -o wide

NAME                 READY   UP-TO-DATE   AVAILABLE   AGE     CONTAINERS           IMAGES                            SELECTOR
my-golang-app-demo   2/2     2            2           9m23s   my-golang-app-demo   my-golang-app:latest   app=my-golang-app-demo

查看pods状态

kubectl get pods -n dev -l app=my-golang-app-demo -o wide
NAME                                 READY   STATUS    RESTARTS   AGE   IP            NODE       NOMINATED NODE   READINESS GATES
my-golang-app-demo-6ddc9c96d-m6qqg   1/1     Running   0          11m   10.244.0.17   minikube   <none>           <none>
my-golang-app-demo-6ddc9c96d-n525c   1/1     Running   0          11m   10.244.0.16   minikube   <none>           <none>

 进入pod,请求接口看到正常返回,pod间已经打通

kubectl -n dev exec -it my-golang-app-demo-6ddc9c96d-m6qqg -- /bin/bash

curl -L localhost:8992/sayHello
"hello1"
curl -L 10.244.0.16:8991/sayHello
"hello"
curl -L 10.244.0.17:8991/sayHello
"hello"

 

4.4 创建service

显然,光有pod是不够的,我们还需要一个类似传统部署方案中的Nginx那样的入口,同时肩负起负载均衡和服务暴露的功能。在K8s集群中,我们通过Service实例实现这个需求。

在service的配置文件中,通过selector选择了带有app: my-golang-app-demo标签的pod作为自己的后端服务,并且完成了8991:8991,8992:8992的端口映射

# service-mydemo-NodePort.yaml
apiVersion: v1
kind: Service
metadata:
  name: svc-my-demo
  namespace: dev
  labels:
    app: my-golang-app-demo
spec:
  selector:
    app: my-golang-app-demo
  ports:
  - protocol: TCP
    port: 8991
    targetPort: 8991
    name: svr-port1
  - protocol: TCP
    port: 8992
    targetPort: 8992
    name: svr-port2
  type: NodePort

查看service状态

kubectl get service -n dev
NAME          TYPE       CLUSTER-IP    EXTERNAL-IP   PORT(S)                         AGE
svc-my-demo   NodePort   10.111.0.15   <none>        8991:30608/TCP,8992:32366/TCP   34s

查看minikube service list

minikube service list
|----------------------|---------------------------|----------------|-----|
|      NAMESPACE       |           NAME            |  TARGET PORT   | URL |
|----------------------|---------------------------|----------------|-----|
| default              | kubernetes                | No node port   |     |
| dev                  | svc-my-demo               | svr-port1/8991 |     |
|                      |                           | svr-port2/8992 |     |
| kube-system          | kube-dns                  | No node port   |     |
| kubernetes-dashboard | dashboard-metrics-scraper | No node port   |     |
| kubernetes-dashboard | kubernetes-dashboard      | No node port   |     |
|----------------------|---------------------------|----------------|-----|

其中url没有值

获取nodes信息

kubectl get nodes
NAME       STATUS   ROLES           AGE   VERSION
minikube   Ready    control-plane   10d   v1.26.3

获取minikube信息,可以看到minikube 这个node 的ip,然后用这个ip访问不到

kubectl describe node minikube

好像只有run起来才能访问,并且映射到本地的其他端口

minikube service svc-my-demo -n dev
|-----------|-------------|----------------|---------------------------|
| NAMESPACE |    NAME     |  TARGET PORT   |            URL            |
|-----------|-------------|----------------|---------------------------|
| dev       | svc-my-demo | svr-port1/8991 | http://192.168.49.2:31968 |
|           |             | svr-port2/8992 | http://192.168.49.2:31107 |
|-----------|-------------|----------------|---------------------------|
🏃  Starting tunnel for service svc-my-demo.
|-----------|-------------|-------------|------------------------|
| NAMESPACE |    NAME     | TARGET PORT |          URL           |
|-----------|-------------|-------------|------------------------|
| dev       | svc-my-demo |             | http://127.0.0.1:65442 |
|           |             |             | http://127.0.0.1:65443 |
|-----------|-------------|-------------|------------------------|
[dev svc-my-demo  http://127.0.0.1:65442
http://127.0.0.1:65443]
❗  Because you are using a Docker driver on darwin, the terminal needs to be open to run it.

执行上面的命令可以看到其实运行起了一个进程,这个时候用http://127.0.0.1:65442可以访问成功

curl -L http://127.0.0.1:65442/sayHello
"hello"%

curl -L http://127.0.0.1:65443/sayHello
"hello1"%

小白不太清楚具体原因,可能是mac环境的特殊问题。不过已经可以访问k8s中的接口了。

PS:

参考bug

services running on minikube cluster are inaccessible · Issue #13788 · kubernetes/minikube · GitHub

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值