1/20

第十二章:Kubernetes 介绍与安装

从这一章节开始正式进入 Kubernetes 的世界。

  • Kubernetes 是什么?

一套在多个机器上运行多个容器的系统。

  • 为什么用 Kubernetes?

在容器很多时,使得管理容器和镜像更简单。

  • 一些概念

  1. Nodes

    节点,一个虚拟机或者物理机器。

  2. Pod

    一组容器,运行在节点中。Kubernetes 中管理的最小计算单元

  3. Kubernetes Clusters

    Kubernetes 集群,可以理解为 Master + Nodes。

  4. Master

    负责管理集群的一个虚拟机或者物理机器。

  5. minikube

    让我们在本地运行 Kubernetes 的命令行工具。

  6. kubectl

    与 Master 交互的命令行工具。

  • 安装

现在安装 Docker 会自动安装上 kubectl,所以我们只要安装 minikube 就可以了。

minikube 官方安装文档:https://minikube.sigs.k8s.io/docs/start/

选择相应的版本安装完毕后即可。

 

安装完成后,使用 minikube start 命令来启动集群。

启动需要花点时间安装,启动后,可以通过 minikube statuskubectl cluster-info 这两个命令查看集群运行信息:

wuxianmimi docker-complex % minikube status
minikube
type: Control Plane
host: Running
kubelet: Running
apiserver: Running
kubeconfig: Configured

kubectl cluster-info

wuxianmimi docker-complex % kubectl cluster-info
Kubernetes control plane is running at https://127.0.0.1:63259
CoreDNS is running at https://127.0.0.1:63259/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy

To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.

 

创建文件夹 kubernetes-simplek8s,并在文件夹内创建2个文件:

client-pod.yaml

# Kubernetes API 的版本
apiVersion: v1
# 这个配置文件生成的对象类型
# Pod 就是一个或一组容器
kind: Pod
# 唯一标识对象的一些数据
metadata:
name: client-pod
labels:
  component: web
# 对象的状态
spec:
containers:
# 容器名,任意取
  - name: client
# 使用的镜像,镜像必须发布在 Docker Hub 上才能用
    image: stephengrider/multi-client
# 暴露的端口
    ports:
      - containerPort: 3000

client-node-port.yaml

apiVersion: v1
# Service 类型,设置集群中的网络
kind: Service
metadata:
name: client-node-port
spec:
# 子类型,一共有四种取值:
# 1.ClusterIP,默认值,暴露内部IP,使得集群内部其他对象可以访问
# 2.NodePort,暴露内部IP+端口,仅用于开发目的
# 3.LoadBalancer,云提供商的负载均衡器向外部暴露服务
# 4.ExternalName,将服务映射到 DNS 名称
type: NodePort
ports:
  - port: 3050
    targetPort: 3000
# 默认:30000-32767
    nodePort: 31515
selector:
  component: web

当我们从外部请求 client 时,请求通过 kube-proxy 发送到 Service,Service 再转发到 Pod 暴露的 3000 端口。

 

配置文件创建完成后,我们使用 kubectl apply 命令对资源应用配置更改:

kubectl apply -f FILENAME [flags]

运行命令,-f 选项传入对应配置文件:

wuxianmimi kubernetes-simplek8s % kubectl apply -f ./client-pod.yaml
pod/client-pod created
wuxianmimi kubernetes-simplek8s % kubectl apply -f ./client-node-port.yaml
service/client-node-port created
wuxianmimi kubernetes-simplek8s %

随后使用 kubectl get pods 查看正在运行的 Pods 列表:

kubectl get (-f FILENAME | TYPE [NAME | /NAME | -l label]) [--watch] [--sort-by=FIELD] [[-o | --output]=OUTPUT_FORMAT] [flags]

获取 Pod 列表:

wuxianmimi kubernetes-simplek8s % kubectl get pods
NAME         READY   STATUS   RESTARTS   AGE
client-pod   1/1     Running   0         2m37s
wuxianmimi kubernetes-simplek8s %

使用 kubectl get services 查看正在运行的服务:

wuxianmimi kubernetes-simplek8s % kubectl get services
NAME               TYPE       CLUSTER-IP       EXTERNAL-IP   PORT(S)         AGE
client-node-port   NodePort    10.102.151.149   <none>        3050:31515/TCP   3m6s
kubernetes         ClusterIP   10.96.0.1       <none>        443/TCP         150m
wuxianmimi kubernetes-simplek8s %

接下来就是准备访问服务了,需要访问 minikube 中的服务,只能通过 ip 来访问,使用 minikube ip 获取 ip 地址:

wuxianmimi kubernetes-simplek8s % minikube ip
192.168.49.2
wuxianmimi kubernetes-simplek8s %

访问 http://192.168.49.2:31515/ 可以看到 multi-client 这个页面。

⚠️:这里就会碰到咪咪在文章开头说到的问题,如果你使用 Mac 的话,由于 Docker Desktop 的实现问题,无法使用 IP 地址访问容器。可以在命令行输入 minikube service client-node-port --url 来获取一个本机地址,通过该地址来访问页面。

imgKubernetes 启动应用成功!

 
posted @ 2025-01-20 20:24  Hbro  阅读(4)  评论(0)    收藏  举报