目 录CONTENT

文章目录

Minikube 搭建 Kubeernetes 集群

Sakura
2024-03-13 / 1 评论 / 0 点赞 / 31 阅读 / 8420 字 / 正在检测是否收录...

使用 Minikube 搭建 Kubeernetes 集群

1. 搭建 Minikube

minikube start | minikube (k8s.io)

2. 基本操作

2.1 集群相关

minikube start 命令可以启动一台单节点 ( node ) 的 Kubernetes 集群

# 启动集群
# minikube start --image-mirror-country='cn'
minikube start

# 停止集群
minikube stop

# 清空集群
minikube delete --all

# 查看集群状态
minikube status

# 连接到这个集群
sakura@SakurasDebian12:~$ minikube ssh 
docker@minikube:~$ ls
docker@minikube:~$ exit
logout

2.2 node相关

# 新增node
minikube node add

# 删除node
minikube node delete [nodename]

# 查询node列表
minikube node list

# 启动/停止指定的集群node
minikube node start/stop [nodename]

2.3 开启 DashBoard

# 1.首先启动组件metrics-server
minikube addons enable metrics-server

# 2.开启DashBord
minikube dashboard #  直接打开默认浏览器
minikube dashboard --url # 返回url

# 如果卡住或者报错,查看kube-system的pod是否ready
kubectl get pods --all-namespaces



sakura@SakurasDebian12:~$ minikube dashboard
🔌  正在开启 dashboard ...
    ▪ 正在使用镜像 docker.io/kubernetesui/dashboard:v2.7.0
    ▪ 正在使用镜像 docker.io/kubernetesui/metrics-scraper:v1.0.8
💡  某些 dashboard 功能需要启用 metrics-server 插件。为了启用所有功能,请运行以下命令:

        minikube addons enable metrics-server


🤔  正在验证 dashboard 运行情况 ...
🚀  正在启动代理...
🤔  正在验证 proxy 运行状况 ...
🎉  正在使用默认浏览器打开 http://127.0.0.1:44061/api/v1/namespaces/kubernetes-dashboard/services/http:kubernetes-dashboard:/proxy/ ...

CTRL + C 退出之后就不能访问了

2.4 组件相关

插件 |米库贝 (k8s.io)

# 查看所有可安装的组件
# 列出所有可用的 minikube 插件及其当前状态(启用/禁用)
minikube addons list

# 开启组件
minikube addons enable ADDON_NAME [flags]

2.5 Kubectl

  • Pod

# 查看pod
kubectl get pod -o wide

# 查看pod日志
kubectl logs/pod名字

# 根据配置文件进行部署
kubectl apply -f 文件名

# 删除
kubectl delete -f 文件名

# 进入指定pod容器
kubectl exec -it pod名字 -- bash

kubectl get namespaces

kubectl get pods -A

# 查看kube-system的pod
kubectl get pods --all-namespaces

# 查看指定命名空间下的pod
kubectl describe pod metrics-server-7c66d45ddc-gmqhx -n kube-system
  • Deployment

# 查看部署情况
kubectl get deployment

  • Service

# 查看服务
kubectl get service

# 删除服务
kubuctl delete service <...>

# 查看服务详情
kubectl describe service 服务详情 

3. Kubernetes 基本架构

Kubernetes 采用了现今流行的“控制面 / 数据面”(Control Plane / Data Plane)架构, 集群里的计算机被称为“节点”(Node),可以是实机也可以是虚机,少量的节点用作控制 面来执行集群的管理维护工作,其他的大部分节点都被划归数据面,用来跑业务应用。

控制面的节点在 Kubernetes 里叫做 Master Node,一般简称为 Master,它是整个集群里 最重要的部分,可以说是 Kubernetes 的大脑和心脏。

数据面的节点叫做 Worker Node,一般就简称为 Worker 或者 Node,相当于 Kubernetes 的手和脚,在 Master 的指挥下干活。

sakura@SakurasDebian12:~$ kubectl get nodes
NAME           STATUS   ROLES           AGE   VERSION
minikube       Ready    control-plane   89m   v1.28.3
minikube-m02   Ready    <none>          16m   v1.28.3
minikube-m03   Ready    <none>          15m   v1.28.3

另外如果集群只有一个 Node,那么这个 Node 既承担 Master 的工作也承担 Worker 的工作

Master

  1. apiserver 是 Master 节点——同时也是整个 Kubernetes 系统的唯一入口,它对外公开了一 系列的 RESTful API,并且加上了验证、授权等功能,所有其他组件都只能和它直接通信。

  2. etcd 是一个高可用的分布式 Key-Value 数据库,用来持久化存储系统里的各种资源对象和状 态,相当于 Kubernetes 里的配置管理员。注意它只与 apiserver 有直接联系,也就是说任何 其他组件想要读写 etcd 里的数据都必须经过 apiserver。

  3. scheduler 负责容器的编排工作,检查节点的资源状态,把 Pod 调度到最适合的节点上运 行,相当于部署人员。因为节点状态和 Pod 信息都存储在 etcd 里,所以 scheduler 必须通 过 apiserver 才能获得。

  4. controller-manager 负责维护容器和节点等资源的状态,实现故障检测、服务迁移、应用伸 缩等功能,相当于监控运维人员。同样地,它也必须通过 apiserver 获得存储在 etcd 里的信 息,才能够实现对资源的各种操作

# 查看这几个组件的状态 
kubectl get pod -n kube-system

Node

Master 里的 apiserver、scheduler 等组件需要获取节点的各种信息才能够作出管理决策,需要 Node 里的 3 个组件了,分别是 kubelet、kube-proxy、container-runtime。

  1. kubelet 是 Node 的代理,负责管理 Node 相关的绝大部分操作,Node 上只有它能够与 apiserver 通信,实现状态报告、命令下发、启停容器等功能。

  2. kube-proxy 的作用有点特别,它是 Node 的网络代理,只负责管理容器的网络通信,简单来说就是为 Pod 转发 TCP/UDP 数据包。

  3. container-runtime 是容器和镜像的实际使用者,在 kubelet 的指挥下创建容器,管理 Pod 的生命周期。

3.3 工作流程

每个 Node 上的 kubelet 会定期向 apiserver 上报节点状态,apiserver 再存到 etcd 里。

每个 Node 上的 kube-proxy 实现了 TCP/UDP 反向代理,让容器对外提供稳定的服务。

scheduler 通过 apiserver 得到当前的节点状态,调度 Pod,然后 apiserver 下发命令给 某个 Node 的 kubelet,kubelet 调用 container-runtime 启动容器。

controller-manager 也通过 apiserver 得到实时的节点状态,监控可能的异常情况,再使 用相应的手段去调节恢复

插件中比较重要的两个:DNS 和 Dashboard。

4. API 对象

# 查看当前 Kubernetes 版本支持的所有对象 
kubectl api-resources

# 可以看到命令呃呃执行过程,以及发出的请求
kubectl get pod --v=9

4.1 编写 Yaml 声明式文件

通过查看kubectl api-resources 来查看 ApiVersion

kubectl explain 是 Kubernetes 自带的 API 文档,会给出对象字段的详细说明

kubectl explain pod
kubectl explain pod.metadata
kubectl explain pod.spec
kubectl explain pod.spec.containers
# 生成一份模版文件
kubectl run ngx --image=nginx:alpine --dry-run=client -o yaml

# 也可以将这段 --dry-run=client -o yaml 定义为shell变量
export out="--dry-run=client -o yaml"
kubectl run ngx --image=nginx:alpine $out
apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    run: ngx
  name: ngx
spec:
  containers:
  - image: nginx:alpine
    name: ngx
    resources: {}
  dnsPolicy: ClusterFirst
  restartPolicy: Always
status: {}

0

评论区