目录层级关系

/opt/nginx/
├── deployment.yaml
└── service.yaml
/opt/namespaces
└──namespaces.yaml

文件位置根据个人爱好放置,文件位置不固定,后期部署能找到就行 

先创建命名空间namespaces.yaml

apiVersion: v1
kind: Namespace
metadata:
  name: nginx
kubectl apply -f namespaces.yaml

创建deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  namespace: nginx
spec:
  replicas: 1 # 副本数量
  selector:
    matchLabels:
      app: nginx # 匹配 Pod 的标签
  template:
    metadata:
      labels:
        app: nginx # Pod 的标签
    spec:
      containers:
      - name: nginx
        image: nginx:latest # 使用的 NGINX 镜像
        ports:
        - containerPort: 80
        resources:
          requests:
            memory: "64Mi" # 最小内存需求
            cpu: "250m" # 最小 CPU 需求
          limits:
            memory: "128Mi" # 最大内存限制
            cpu: "500m" # 最大 CPU 限制

yaml文件规范

  • 确保使用空格进行缩进,并且缩进一致。
  • 键值对使用冒号和空格分隔。
  • 列表项使用连字符和空格表示。
  • 字符串通常不需要引号,除非包含特殊字符。
  • 多行字符串使用 |> 表示。
  • 使用 # 添加注释。

service.yaml

apiVersion: v1
kind: Service
metadata:
  name: nginx-service
  namespace: nginx
spec:
  selector:
    app: nginx # 选择标签为 app: nginx 的 Pod
  ports:
    - protocol: TCP
      port: 80 # 服务端口
      targetPort: 80 # Pod 内部端口
      nodePort: 31532 # 节点的端口
  type: NodePort # 使用 NodePort 类型暴露服务

为什么要用deloyment和service两个文件创建pod

Deployment

  • 目的:用于管理和部署应用的多个副本。
  • 功能:确保指定数量的 Pod 副本处于运行状态,提供滚动更新、回滚等功能。
  • 特点:负责 Pod 的创建、更新和管理,但不直接暴露 Pod。

Service

  • 目的:提供稳定的网络访问,并将请求路由到合适的 Pod。
  • 功能:定义一个稳定的 IP 地址和 DNS 名称,以便其他应用可以稳定地访问服务;负责负载均衡和服务发现。
  • 特点:抽象 Pod 的 IP 地址变化,提供单一的访问入口。

为什么需要 Service

  1. Pod 的 IP 地址不稳定:Pod 在创建或删除后,其 IP 地址会发生变化。如果直接依赖 Pod 的 IP 地址,访问方式会不稳定。

  2. 负载均衡:Service 提供负载均衡,将流量分配到多个 Pod 上,提高应用的可用性和性能。

  3. 服务发现:Service 提供稳定的 DNS 名称,方便其他应用通过该名称访问服务,而不用关心背后具体的 Pod。

Deployment 负责管理应用实例的生命周期,但不提供稳定的网络访问。Service 提供稳定的网络入口和负载均衡。将 Deployment 和 Service 结合使用,可以确保应用的高可用性、稳定性和可访问性。

 应用 YAML 文件

cd到配置文件的目录里

kubectl apply -f deployment.yaml
kubectl apply -f service.yaml

验证部署和服务

查看 Pod 状态:

kubectl get pods -n nginx

 如果查看pod状态一直是“ImagePullBackOff ”、“Terminating”、“pending”这些状态,可以试试更换Docker 镜像加速器

配置方法

 将以下内容添加到 /etc/docker/daemon.json 文件中(没有就手动创建一个),并重启 Docker 服务

请替换 <your-region> 为您所在的阿里云镜像加速区域,如 cn-shanghaicn-beijing

添加完成后最好docker pull 任意镜像,测试镜像站能否被使用

更换完镜像站点后重新执行一下

kubectl apply -f deployment.yaml
kubectl apply -f service.yaml

{
  "registry-mirrors": ["https://<your-region>.mirror.aliyuncs.com"]
}

查看服务状态:

kubectl get services -n nginx

通过 NodePort 访问 NGINX 服务:

http://<node-ip>:<node-port>

其中,<node-ip> 是你的集群node节点 IP,<node-port> 是由 Kubernetes 分配的 NodePort 端口。

 

 

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐