k8s创建资源(2)

一,两种创建资源的方法

1. 基于命令的方式:

  1. 简单直观快捷,上手快。
  2. 适合临时测试或实验。

2. 基于配置清单的方式:

  1. 配置文件描述了 What,即应用最终要达到的状态。
  2. 配置文件提供了创建资源的模板,能够重复部署。
  3. 可以像管理代码一样管理部署。
  4. 适合正式的、跨环境的、规模化部署。
  5. 这种方式要求熟悉配置文件的语法,有一定难度。

环境介绍

主机 IP地址 服务
master 192.168.1.21 k8s
node01 192.168.1.22 k8s
node02 192.168.1.23 k8s

二. 配置清单(yam,yaml)

在k8s中,一般使用yaml格式的文件来创建符合我们预期期望的pod,这样的yaml文件我们一般称为资源清单

/etc/kubernetes/manifests/ k8s存放(yam、yaml)文件的地方

**kubectl explain deployment(通过explain参数加上资源类别就能看到该资源应该怎么定义)

kubectl explain deployment.metadata 通过资源类别加上带有Object标记的字段,我们就可以看到一级字段下二级字段的内容有那些怎么去定义等

kubectl explain deployment.metadata.ownerReferences 通过加上不同级别的字段名称来看下字段下的内容,而且前面的[]号代表对象列表

1.常见yaml文件写法,以及字段的作用

(1) apiVersion:api版本信息

(用来定义当前属于哪个组和那个版本,这个直接关系到最终提供使用的是那个版本)

[[email protected] manifests]# kubectl api-versions
//查看到当前所有api的版本

(2) kind: 资源对象的类别

(用来定义创建的对象是属于什么类别,是pod,service,还是deployment等对象,可以按照其固定的语法格式来自定义。)
(3) metadata: 元数据 名称字段(必写)

提供以下几个字段:
  creationTimestamp: "2019-06-24T12:18:48Z"
  generateName: myweb-5b59c8b9d-
  labels: (对象标签)
    pod-template-hash: 5b59c8b9d
    run: myweb
  name: myweb-5b59c8b9d-gwzz5 (pods对象的名称,同一个类别当中的pod对象名称是唯一的,不能重复)
  namespace: default (对象所属的名称空间,同一名称空间内可以重复,这个名称空间也是k8s级别的名称空间,不和容器的名称空间混淆)
  ownerReferences:

  • apiVersion: apps/v1
    blockOwnerDeletion: true
        controller: true
        kind: ReplicaSet
        name: myweb-5b59c8b9d
        uid: 37f38f64-967a-11e9-8b4b-000c291028e5
      resourceVersion: "943"
      selfLink: /api/v1/namespaces/default/pods/myweb-5b59c8b9d-gwzz5
      uid: 37f653a6-967a-11e9-8b4b-000c291028e5
      annotations(资源注解,这个需要提前定义,默认是没有的)
    通过这些标识定义了每个资源引用的path:即/api/group/version/namespaces/名称空间/资源类别/对象名称

(4) spec: 用户期望的状态

(这个字段最重要,因为spec是用来定义目标状态的‘disired state’,而且资源不通导致spec所嵌套的字段也各不相同,也就因为spec重要且字段不相同,k8s在内部自建了一个spec的说明用于查询)

(5) status:资源现在处于什么样的状态

(当前状态,’current state‘,这个字段有k8s集群来生成和维护,不能自定义,属于一个只读字段)

2.编写一个yaml文件

[[email protected] ~]# vim web.yaml
kind: Deployment  #资源对象是控制器
apiVersion: extensions/v1beta1   #api的版本
metadata:      #描述kind(资源类型)
  name: web   #定义控制器名称
spec:
  replicas: 2   #副本数量
  template:     #模板
    metadata:
      labels:   #标签
        app: web_server
    spec:
      containers:   #指定容器
      - name: nginx  #容器名称
        image: nginx   #使用的镜像

执行一下

[[email protected] ~]# kubectl apply -f web.yaml 

查看一下

[[email protected] ~]# kubectl get deployments.  -o wide
//查看控制器信息

[[email protected] ~]# kubectl get pod -o wide
//查看pod节点信息

3.编写一个service.yaml文件

[[email protected] ~]# vim web-svc.yaml
kind: Service  #资源对象是副本
apiVersion: v1   #api的版本
metadata:
  name: web-svc
spec:
  selector:     #标签选择器
    app: web-server  #须和web.yaml的标签一致
  ports:              #端口
  - protocol: TCP
    port: 80            #宿主机的端口
    targetPort: 80      #容器的端口

使用相同标签和标签选择器内容,使两个资源对象相互关联。

创建的service资源对象,默认的type为ClusterIP,意味着集群内任意节点都可访问。它的作用是为后端真正服务的pod提供一个统一的接口。如果想要外网能够访问服务,应该把type改为NodePort

(1)执行一下

[[email protected] ~]# kubectl apply -f web-svc.yaml 

(2)查看一下

[[email protected] ~]# kubectl get svc
//查看控制器信息

(3)访问一下

[[email protected] ~]# curl 10.111.193.168

4.外网能够访问服务

(1)修改web-svc.yaml文件

kind: Service  #资源对象是副本
apiVersion: v1   #api的版本
metadata:
  name: web-svc
spec:
  type: NodePort    #添加 更改网络类型
  selector:     #标签选择器
    app: web_server  #须和web.yaml的标签一致
  ports:              #端口
  - protocol: TCP
    port: 80            #宿主机的端口
    targetPort: 80      #容器的端口
    nodePort: 30086     #指定群集映射端口,范围是30000-32767

(2)刷新一下

[[email protected] ~]#  kubectl apply -f web-svc.yaml 

(3)查看一下

[[email protected] ~]# kubectl get svc

(4)浏览器测试

三、小实验

基于上一篇博客实验继续进行

1.使用yaml文件的方式创建一个Deployment资源对象,要求镜像使用个人私有镜像v1版本。replicas为3个。

编写yaml文件

[[email protected] ~]# vim www.yaml
kind: Deployment
apiVersion: extensions/v1beta1
metadata:
  name: xgp
spec:
  replicas: 3
  template:
    metadata:
      labels:
        app: www_server
    spec:
      containers:
      - name: web
        image: 192.168.1.21:5000/web:v1   

(1)执行一下

[[email protected] ~]# kubectl apply -f web-svc.yaml 

(2)查看一下

[[email protected] ~]# kubectl get deployments. -o wide
//查看控制器信息

[[email protected] ~]# kubectl get pod -o wide
//查看pod节点信息

(3)访问一下

2. 使用yaml文件的方式创建一个Service资源对象,要与上述Deployment资源对象关联,type类型为: NodePort,端口为:30123.

编写service文件

[[email protected] ~]# vim www-svc.yaml
kind: Service
apiVersion: v1
metadata:
  name: www-svc
spec:
  type: NodePort
  selector:
    app: www_server
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80
    nodePort: 30123

执行一下

[[email protected] ~]# kubectl apply -f www-svc.yaml 

查看一下

[[email protected] ~]# kubectl get svc

访问一下

四. 总结

1. Pod的作用

在k8s中pod是最小的管理单位,在一个pod中通常会包含一个或多个容器。大多数情况下,一个Pod内只有一个Container容器。
在每一个Pod中都有一个特殊的Pause容器和一个或多个业务容器,Pause来源于pause-amd64镜像,Pause容器在Pod中具有非常重要的作用:

  • Pause容器作为Pod容器的根容器,其本地于业务容器无关,它的状态代表了整个pod的状态。
  • Pod里的多个业务容器共享Pause容器的IP,每个Pod被分配一个独立的IP地址,Pod中的每个容器共享网络命名空间,包括IP地址和网络端口。Pod内的容器可以使用localhost相互通信。k8s支持底层网络集群内任意两个Pod之间进行通信。
  • Pod中的所有容器都可以访问共享volumes,允许这些容器共享数据。volumes还用于Pod中的数据持久化,以防其中一个容器需要重新启动而丢失数据。

2. Service的作用

Service 是后端真实服务的抽象,一个 Service 可以代表多个相同的后端服务

Service 为 POD 控制器控制的 POD 集群提供一个固定的访问端点,Service 的工作还依赖于 K8s 中的一个附件,就是 CoreDNS ,它将 Service 地址提供一个域名解析。

NodePort 类型的 service

clusterIP:指定 Service 处于 service 网络的哪个 IP,默认为动态分配

NodePort 是在 ClusterIP 类型上增加了一个暴露在了 node 的网络命名空间上的一个 nodePort,所以用户可以从集群外部访问到集群了,因而用户的请求流程是:Client -> NodeIP:NodePort -> ClusterIP:ServicePort -> PodIP:ContainerPort。

可以理解为 NodePort 增强了 ClusterIP 的功能,让客户端可以在每个集群外部访问任意一个 nodeip 从而访问到 clusterIP,再由 clusterIP 进行负载均衡至 POD。

3.流量走向

我们在创建完成一个服务之后,用户首先应该访问的是nginx反向代理的ip,然后通过nginx访问到后端的k8s服务器(master节点)的“NodePort暴露IP 及 映射的端口“,通过”master节点“的“ip+映射端口”访问到后端k8s节点的信息。

原文地址:https://blog.51cto.com/14320361/2464951

时间: 2024-09-29 20:48:54

k8s创建资源(2)的相关文章

k8s创建资源(1)、

两种创建资源的方法 基于命令的方式: 简单直观快捷,上手快. 适合临时测试或实验. 基于配置文件的方式: 配置文件描述了 What,即应用最终要达到的状态. 配置文件提供了创建资源的模板,能够重复部署. 可以像管理代码一样管理部署. 适合正式的.跨环境的.规模化部署. 这种方式要求熟悉配置文件的语法,有一定难度. 一,用命令行的方式创建资源 仅接受json格式 配置清单(yml.yaml) [[email protected] ~]# cd /etc/kubernetes/manifests/

k8s 创建资源的两种方式 - 每天5分钟玩转 Docker 容器技术(124)

命令 vs 配置文件 Kubernetes 支持两种方式创建资源: 1. 用 kubectl 命令直接创建,比如: kubectl run nginx-deployment --image=nginx:1.7.9 --replicas=2 在命令行中通过参数指定资源的属性. 2. 通过配置文件和 kubectl apply 创建,要完成前面同样的工作,可执行命令: kubectl apply -f nginx.yml nginx.yml 的内容为: 资源的属性写在配置文件中,文件格式为 YAML

创建资源的两种方式

命令 vs 配置文件 Kubernetes 支持两种方式创建资源: 1. 用 kubectl 命令直接创建 kubectl run nginx-deployment --image=nginx:1.7.9 --replicas=2 在命令行中通过参数指定资源的属性. 2. 通过配置文件和 kubectl apply 创建 要完成前面同样的工作,可执行命令: [[email protected] k8s]# kubectl apply -f nginx.yaml deployment.extens

k8s核心资源对象& NameSpace(指定版本回滚)

k8s核心的资源对象: Pod:是运行以及调度的原子单位,也就是k8s中最小的资源单位,同一个pod可以同时运行多个container,多个container之间共享:(UTS(主机名和域名),IPC(消息队列和共享内存),NET(网络栈,端口等),namespace(名称空间)),但USR(用户和组),MNT(挂载点),PID(进行编号)是相互隔离的.pod有两种类型的pod:一类是由控制器控制的pod,一类是自主式pod(不受控制器管理,自己管理自己) Deployment:最常见的pod控

opencms创建资源深度分析

引入: 在opencms中,有些资源是刚创建的,有些资源是创建并发布的,这些资源创建时候做了哪些工作呢,他们的存储又如何呢,这是这篇文章需要解决的话题. 分析: 以最简单的文本文件为例,当我们在某目录下(比如叫 /charlesstudy)用向导创建某文本文件时,如下: 它发送的请求为 POST http://localhost:8080/opencms/opencms/system/workplace/commons/newresource.jsp 服务器端的响应入口是在CmsNewResou

创建资源和用户关键字

一.测试套件下创建用户关键字 1.创建关键字测试套件右击->点击new user keyword,然后输入name,点击OK保存. 2.在用户关键字的edit点击settings,然后输入Arguments 参数为:${number} ,这就像定函数的输入参.可以设置多个变量,之间用"|"分隔.添加循环的用例,循环的次数为:${number} 3.创建好之后在用例中就可以直接使用这个关键字了.使用了循环的方法,并且入参${number}=8 二.创建资源后添加关键字 上面创建用户

PA 项目任务创建资源

-- 创建资源 DECLARE p_project_id NUMBER := 155233; p_task_id NUMBER := 244639; p_resource_list_member_id NUMBER := 2023; p_planned_quantity NUMBER := 101; p_pm_task_asgmt_reference VARCHAR2(240) := 'CXYTEST0001'; p_task_assignments_in pa_task_assignments

C#创建资源文件

资源文件顾名思义就是存放资源的文件.资源文件在程序设计中有着自身独特的优势,他独立于源程序,这样资源文件就可以被多个程序使用.同时在程序设计的时候,有时出于安全或者其他方面因素的考虑,把重要东西存放在资源文件中,也可以达到保密.安全的效果.那么Visual C#所使用的资源文件中到底存放哪些东西呢?在用Visual C#创建资源文件大致可以存放三种类型的数据资源,分别是字节数组.各种对象和字符串.本文将结合一个程序例子来具体说明用Visual C#是如何创建资源文件的. 一.用Visual C#

laravel 创建资源控制器

php artisan make:controller PhotoController --resource 如果不添加 --resource只会创建普通的控制器,反之则创建资源控制器 资源控制器图例: 原文地址:https://www.cnblogs.com/ryanLee1/p/8470008.html