k8s资源清单创建pod、deployment、service

本文档详细介绍了如何通过 Kubernetes 资源清单(YAML 文件)来创建 Pod、Deployment 和 Service。内容包括 pod yaml、deployment yaml 和 service yaml 的配置示例,帮助读者理解并掌握在 Linux 环境中操作 Kubernetes 基础组件的方法。

资源清单配置

pod yaml

#暴露端口可以进行访问
[root@master ~]# kubectl create ns xialuo
namespace/xialuo created

[root@master ~]# vim pod.yaml
apiVersion: v1
kind: Pod
metadata:
  name: myweb
  namespace: xialuo   #指定名称空间,事先创建过的 命令:kubectl create ns xialuo
  labels:
    app: myweb
spec:
  containers:
    - name: web1
      image: xialuo1/httpd:v0.1
      imagePullPolicy: IfNotPresent
      ports:
        - containerPort: 80
          hostPort: 8080  #这里必须填写有效端口

[root@master ~]# kubectl create -f pod.yaml
pod/myweb created
[root@master ~]# kubectl get pods -n xialuo -o wide
NAME    READY   STATUS             RESTARTS   AGE    IP            NODE    NOMINATED NODE   READINESS GATES
myweb   1/1     Running   0          109s   10.244.2.14   node2   <none>           <none>

deployment yaml

[root@master ~]# vim deploy.yaml 
apiVersion: apps/v1  #api版本
kind: Deployment  #资源类型
metadata:  #元数据定义
  name: nginx-deploy  #名称
  namespace: default   #名称空间
  labels:  #标签
    app: nginx-web
spec:   #deployment定义
  replicas: 3   #定义2个副本
  selector:    #标签选择器,匹配pod的标签
    matchLabels:
      app: nginx-web
  template:   #pod模板定义
    metadata:
      name: nginx1
      namespace: default
      labels:  #这里的标签必须和标签选择器的一致
        app: nginx-web
    spec:   #pod内的容器定义
      containers:
        - name: web
          image: nginx
          imagePullPolicy: IfNotPresent
          ports:
            - containerPort: 80   #暴露IP

[root@master ~]# kubectl create -f deploy.yaml 
deployment.apps/nginx-deploy created
[root@master ~]# kubectl get pod -o wide 
NAME                            READY   STATUS             RESTARTS   AGE     IP            NODE    NOMINATED NODE   READINESS
GATES
nginx-deploy-69b65f949b-8zbnn   1/1     Running            0          53s     10.244.2.16   node2   <none>           <none>
nginx-deploy-69b65f949b-h25r6   1/1     Running            0          53s     10.244.2.15   node2   <none>           <none>
nginx-deploy-69b65f949b-l74qs   1/1     Running            0          53s     10.244.2.17   node2   <none>           <none>

暴露端口到主机
[root@master ~]# kubectl expose deployment nginx-deploy --port=80 --type=NodePort
service/nginx-deploy exposed
[root@master ~]# kubectl get svc
NAME           TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
deploy-nginx   ClusterIP   10.96.65.25     <none>        80/TCP         2d20h
kubernetes     ClusterIP   10.96.0.1       <none>        443/TCP        3d20h
nginx          NodePort    10.111.153.17   <none>        80:31775/TCP   3d20h
nginx-deploy   NodePort    10.97.78.4      <none>        80:31494/TCP   18s

在这里插入图片描述

service yaml

[root@master ~]# vim svc.yaml 
apiVersion: v1
kind: Service
metadata:
    name: nginx-svc
    namespace: default
spec:
  selector:
    app: nginx-web
  type: NodePort
  ports:
    - nodePort: 30008
      port: 80
      targetPort: 80
[root@master ~]# kubectl create -f svc.yaml 
service/nginx-svc created
[root@master ~]# kubectl get svc
NAME           TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
kubernetes     ClusterIP   10.96.0.1       <none>        443/TCP        3d20h
nginx-svc      NodePort    10.105.126.83   <none>        80:30008/TCP   3s

[root@master ~]# kubectl get pods -o wide
NAME                            READY   STATUS    RESTARTS   AGE   IP            NODE                    NOMINATED NODE   READINESS GATES
nginx-deploy-69b65f949b-8zbnn   1/1     Running            0          11m     10.244.2.16   node2   <none>           <none>
nginx-deploy-69b65f949b-h25r6   1/1     Running            0          11m     10.244.2.15   node2   <none>           <none>
nginx-deploy-69b65f949b-l74qs   1/1     Running            0          11m     10.244.2.17   node2   <none>           <none>

查看endpoint资源端点列表
[root@master ~]# kubectl get endpoints
NAME           ENDPOINTS                                      AGE
kubernetes     192.168.149.137:6443                           3d20h
nginx-svc      10.244.2.15:80,10.244.2.16:80,10.244.2.17:80   2m17s
### 如何编写 Kubernetes 资源清单 YAML 文件 #### 1. 基本结构 Kubernetes 资源清单文件通常由几个核心字段组成,这些字段定义了资源的元数据、规格以及行为。以下是基本结构: ```yaml apiVersion: <API版本> # 定义所使用的 Kubernetes API 版本[^3] kind: <资源类型> # 指定要创建资源种类,例如 Pod, Service 等 metadata: name: <资源名称> # 设置资源的名字 spec: # 描述资源的具体配置细节 ... ``` #### 2. 实例演示 下面是一个简单的 Pod 配置示例,展示了如何使用上述结构来定义一个容器化的应用程序。 ```yaml apiVersion: v1 # 使用的核心 API 版本 kind: Pod # 创建的对象类型为 Pod metadata: name: my-first-pod # Pod 名称为 my-first-pod spec: containers: - name: nginx-container # 容器名为 nginx-container image: nginx:latest # 使用最新的 Nginx 镜像 ports: - containerPort: 80 # 映射容器端口到主机上的 80 端口 ``` 此示例中,`apiVersion`, `kind`, 和 `metadata.name` 是必需字段,而 `spec.containers` 列表则描述了一个运行 Nginx 的单个容器及其开放的端口号[^4]。 #### 3. 应用资源配置 一旦完成了 YAML 文件的编写,可以利用 kubectl 工具将其应用至集群环境之中。常用命令如下所示: ```bash kubectl apply -f pod.yaml # 将 pod.yaml 中的内容应用于当前上下文中指定的 Kubernetes 集群 ``` 如果希望仅验证而不实际提交更改,则可采用以下方式测试配置的有效性: ```bash helm template --validate . | kubectl api-resources --validate=true -f - ``` 这一步骤能够确保生成的 YAML 文件符合预期的标准并能被 Kubernetes 正确解析[^2]。 #### 4. 更复杂的例子:Deployment 类型 对于更复杂的应用场景,可能需要用到 Deployment 来管理多个副本集和服务扩展等功能。这里提供一段关于 Deployment 的样例代码供参考: ```yaml apiVersion: apps/v1 # 使用 applications API 组合下的 V1 版本 kind: Deployment # 对象类型设置为 Deployment metadata: name: example-deployment # deployment 名字设为例子部署 spec: replicas: 3 # 运行三个实例作为高可用保障 selector: matchLabels: app: webapp # 标签选择器匹配具有特定标签的服务 template: metadata: labels: app: webapp # 添加标签以便于服务发现机制识别 spec: containers: - name: demo-app # 主程序容器命名示范应用 image: nodejs-express-demo # 自定义镜像地址替换此处占位符 ports: - containerPort: 3000 # 开放内部监听端口给外部访问 ``` 以上展示了一种典型的多副本部署模式,其中包含了负载均衡自动恢复等特性支持。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值