windows容器集群部署应用


强烈建议先看镜像制作篇,该篇章为本篇的前置内容配合食用效果更佳。 传送门*

1. 查看VM上的Kubernetes访问的配置文件Kube config文件

/home/ubuntu/.kube下的文件config就是Kubernetes访问的配置文件。在VS Code中打开这个文件。
kubeconfig 文件是 Kubernetes 用来保存集群、用户、命名空间和认证信息的配置文件。这个文件使得 kubectl 和其他 Kubernetes 客户端能够知道如何访问和认证到 Kubernetes 集群。以下是 kubeconfig 文件的关键组成部分和它们的作用:
1. clusters:
这部分定义了一个或多个集群的信息,包括每个集群的名字和 Kubernetes API 服务器的地址。通常还包含了用于建立安全连接的证书信息,比如 CA(证书颁发机构)的证书。
2. contexts:
context 将集群、用户和命名空间组合在一起,这样你就可以快速切换到不同的集群或命名空间。它包括引用集群、用户凭证和默认命名空间的名称。
3. users:
这部分包含了连接到 Kubernetes 集群所需的用户认证信息。这可能包括用户名和密码、客户端证书和密钥,或其他身份验证机制(如 token 或 Kerberos)的详细信息。
4. Namespace:
在 Kubernetes 中,命名空间(Namespace)是一种将集群中的资源划分为多个逻辑分区的方法。这种机制使得多个团队或项目能够在同一个物理集群上共存,而彼此之间又相对隔离,保证了资源的组织和安全性。

2. 在集群上创建属于自己的namespace

kubectl create namespace {取命名空间}

3. 在集群上创建容器注册表机密

kubectl create secret docker-registry {取一个机密代号} --docker-server={注册表服务器} --docker-username={注册表用户名} --docker-password={注册表密码} --namespace={命名空间}

4. 部署pod

4.1 创建部署pod的yaml文件(XXX.yaml)

apiVersion: apps/v1  
kind: Deployment 
metadata:
  labels: 
    app: {取个名来标识是针对的同种应用}   
  name: {取个部署名,本质是模版,部署后有个运行名需要查看}  
  namespace: {集群命名空间}
spec: 
  replicas: 1
  selector:   
    matchLabels: 
      app: {metadata.labels.app}  
  template:
    metadata:
      labels:
        app: {metadata.labels.app} 
    spec:
      containers:
        - image: {容器镜像位置}
          name: {3}   
          ports:   
          - containerPort: {制作镜像时的监听窗口}
      imagePullSecrets:
        - name: {注册表机密代号}

pod是Kubernetes中最小的部署单元,它可以包含一个或多个容器。这个文件的参数含义如下:

  • apiVersion: apps/v1:这是指定Kubernetes API的版本,apps/v1是用来管理部署对象的API。
  • kind: Deployment:这是指定要创建的对象的类型,Deployment是一种控制器,它可以管理pod的生命周期,比如创建、更新、删除等。
  • metadata:这是指定对象的元数据,比如名称、标签、命名空间等。
    • labels:给pod分类,贴标签,利于使用k8s进行管理
    • name:这是指定对象的名称,这里的{3}是一个占位符,可以替换成任意字符串。
    • namespace:这是指定对象所属的命名空间,命名空间是一种逻辑分组,可以用来隔离不同的对象。这里的{0}是一个占位符,可以替换成任意字符串。
  • spec:这是指定对象的规格,比如要部署的pod的数量、模板等。
    • replicas:这是指定要部署的pod的数量,这里的1表示只部署一个pod。
    • selector:这是指定要管理的pod的选择器,它是一种键值对,可以用来匹配和筛选pod。这里的matchLabels表示要匹配的是标签,app:
      {1}表示要匹配的标签是app,值是{1},这意味着这个部署对象只会管理标签为app:{1}的pod。
    • template:这是指定要部署的pod的模板,它包含了pod的元数据和规格。
      • metadata:这是指定pod的元数据,比如标签等。这里的app: {1}表示这个pod的标签是app,值是{1},这样就可以和部署对象的选择器匹配。
      • spec:这是指定pod的规格,比如要运行的容器等。
        • containers:这是指定pod中要运行的容器的列表,每个容器都有一个名称、一个镜像、一个或多个端口等。
          • image:这是指定容器要运行的镜像,镜像是一种包含了应用程序和依赖的文件系统。这里的{4}是一个占位符,可以替换成任意字符串,比如nginx:latest表示要运行最新版本的nginx镜像。
          • name:这是指定容器的名称,这里的{3}是一个占位符,可以替换成任意字符串,比如web表示这个容器的名称是web。
          • ports:这是指定容器要暴露的端口的列表,每个端口都有一个容器端口号,可以用来访问容器内的服务。这里的{容器窗口}是一个占位符,可以替换成任意数字,比如80表示这个容器要暴露80端口。
        • imagePullSecrets:这是指定拉取镜像时要使用的机密的列表,机密是一种存储敏感信息的对象,比如用户名、密码等。这里的{注册表机密代号}是一个占位符,可以替换成任意字符串,比如mysecret表示要使用名为mysecret的机密来拉取镜像。

4.2 部署pod命令

kubectl apply -f {XXX.yaml}
查看结果,的部署运行的名字,从中拷贝出pod名称
kubectl get pods -n {给pod分配的命名空间}

4.3 通过使用kubectl 转发端口查看自己的应用

kubectl port-forward {运行时的pod的名字} -n {pod所属命名空间} {本地窗口}:{镜像监听端口}

5. 创建服务文件myingress.yaml

---
apiVersion: v1
kind: Service
metadata:
  name: ai-front
  namespace: {已经存在的命名空间}
spec:
  ports:
  - port: {随意端口}
  selector:
    app: {要绑定的pod的标签}
    
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: in-scuapps-u0apps-{你的学号}
  namespace: {已经存在的的命名空间} 
spec:
  rules:
  - host: {你注册的主机}
    http:
      paths:
      - path: /{路径}
        pathType: Prefix
        backend:
          service:
            name: ai-front
            port:
              number: {和服务中的端口一致}     

这个yaml的特殊之处是它定义了两种不同的对象,一种是服务(Service),一种是入口(Ingress)。服务和入口都是用来访问pod的对象,但是它们有一些区别:

  • 服务是一种内部的访问对象,它可以提供一个稳定的访问地址和端口来访问一组pod,但是它只能在Kubernetes集群内部被访问,不能被外部的用户或系统访问。

  • 入口是一种外部的访问对象,它可以提供一个外部的访问地址和路径来路由请求到不同的服务,但是它需要一个入口控制器(Ingress Controller)来实现,入口控制器是一种负责接收和转发请求的组件,比如nginx或traefik等。

  • 这个文件的字段含义如下:

  • apiVersion: v1:这是指定Kubernetes API的版本,v1是用来管理服务对象的API。

  • kind: Service:这是指定要创建的对象的类型,Service是一种对象,它可以提供一个稳定的访问地址和端口来访问一组pod。

  • metadata:这是指定对象的元数据,比如名称、命名空间等。

    • name:这是指定对象的名称,这里的ai-front表示这个服务的名称是ai-front。
    • namespace:这是指定对象所属的命名空间,这里的{你的命名空间}是一个占位符,可以替换成任意字符串,比如my-namespace。
  • spec:这是指定对象的规格,比如要提供的端口、要选择的pod等。

    • ports:这是指定服务要提供的端口的列表,每个端口都有一个端口号,可以用来访问服务内的pod。
      • port:这是指定服务要提供的端口号,这里的{5100}是一个占位符,可以替换成任意数字,比如80或443等。
    • selector:这是指定服务要选择的pod的选择器,它是一种键值对,可以用来匹配和筛选pod。这里的app: {你的app}表示要选择的pod的标签是app,值是{你的app},{你的app}是一个占位符,可以替换成任意字符串,比如my-app。

  • apiVersion: networking.k8s.io/v1:这是指定Kubernetes API的版本,networking.k8s.io/v1是用来管理入口对象的API。
  • kind: Ingress:这是指定要创建的对象的类型,Ingress是一种对象,它可以提供一个外部的访问地址和路径来路由请求到不同的服务。
  • metadata:这是指定对象的元数据,比如名称、命名空间等。
    • name:这是指定对象的名称,这里的in-scuapps-u0apps-{你的学号}表示这个入口的名称是in-scuapps-u0apps-{你的学号},{你的学号}是一个占位符,可以替换成任意字符串,比如123456。
    • namespace:这是指定对象所属的命名空间,这里的{你的命名空间}是一个占位符,可以替换成任意字符串,比如my-namespace。
  • spec:这是指定对象的规格,比如要定义的规则等。
    • rules:这是指定入口要定义的规则的列表,每个规则都有一个主机名和一个或多个路径,可以用来路由请求到不同的服务。
      • host:这是指定规则要匹配的主机名,这里的ai1.scuapps.cn表示要匹配的主机名是ai1.scuapps.cn。
      • http:这是指定规则要匹配的HTTP协议的信息,它包含了一个或多个路径,可以用来路由请求到不同的服务。
        • paths:这是指定规则要匹配的路径的列表,每个路径都有一个路径值、一个路径类型和一个后端,可以用来路由请求到不同的服务。
          • path:这是指定路径要匹配的路径值,这里的/{你的学号}表示要匹配的路径值是/{你的学号},{你的学号}是一个占位符,可以替换成任意字符串,比如/123456。
          • pathType:这是指定路径要匹配的路径类型,这里的Prefix表示要匹配的是前缀,也就是说,只要请求的路径以/{你的学号}开头,就会匹配这个路径,比如/123456/hello或/123456/world等。
          • backend:这是指定路径要路由的后端的信息,它包含了一个服务的名称和端口,可以用来访问服务内的pod。
            • service:这是指定后端要路由的服务的信息,它包含了一个服务的名称和端口,可以用来访问服务内的pod。
              • name:这是指定服务的名称,这里的ai-front表示要路由的服务的名称是ai-front,它必须和上面定义的服务的名称一致。
              • port:这是指定服务的端口的信息,它包含了一个端口号,可以用来访问服务内的pod。
                • number:这是指定服务的端口号,这里的{5100}是一个占位符,可以替换成任意数字,比如80或443等,它必须和上面定义的服务的端口号一致。

6. 在网址中访问服务

{你注册额定主机}/{在上面文件中填的path}

  • 26
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值