最新要闻

广告

手机

光庭信息跌4.57% 2021上市超募11亿2022扣非降74% 时快讯

光庭信息跌4.57% 2021上市超募11亿2022扣非降74% 时快讯

搜狐汽车全球快讯 | 大众汽车最新专利曝光:仪表支持拆卸 可用手机、平板替代-环球关注

搜狐汽车全球快讯 | 大众汽车最新专利曝光:仪表支持拆卸 可用手机、平板替代-环球关注

家电

世界热推荐:Kubernetes 对象以及部署nginx服务示例(四)

来源:博客园

什么是 Kubernetes 对象?

在k8s中管理员与平台交互的最重要方式之一就是创建和管理 Kubernetes 对象,对象有助于帮助用户部署应用程序和维护集群。理解 Kubernetes 对象的另一种方法是将它们视为类实例。每个创建的对象都引用一个预定义的类,该类告诉 api server如何处理系统资源并与特定组件进行通信。那么这些对象都包含哪些呢?这篇文章就通过一些实例来说明对象怎么使用,或者怎么去定义对象。

Kubernetes中对象都包含namespacespoddeploymentsvolumes以及secrets等。

要查看 Kubernetes集群中可用对象列表,可通过 kubectl命令查看:


(资料图片)

kubectl api-resources

执行命令后,可以看到如下一部分对象列表。这里只是截取了一小部分。

那么这些对象都是怎么产生的呢,或者怎么创建的呢?继续看。

首先我们在创建对象的时候,一般都是使用 YAMLJSON在文件中描述想要的内容(所需状态),它称为对象规范。下面先来一个Pod对象规范示例(YAML):

# Pod specapiVersion: v1kind: Podmetadata:  name: webserver-podspec:  containers:  - name: webserver    image: nginx:latest    ports:    - containerPort: 80

在上面的例子中给出了很多字段,这些字段解释如下:

  • apiVersion:对象的 Kubernetes API 版本
  • kind: 对象种类。e.g. PodDeploymentServiceConfigmap
  • metadata:元数据,用于唯一标识和描述 Kubernetes对象。一些常见添加到对象中的关键元数据labelsnamenamespaceannotations
  • spec:在 Kubernetes 对象定义的spec部分中,声明创建的对象所需状态和特征

上面这几个字段在定义对象中都是通用的。

当然还有很多字段我们这里就不做介绍了,可以通过执行如下命令查看各个字段的意思:

kubectl explain pods

这里是列举了pod字段的含义,你也可以查看servicesnamespaces等等。

定义好对象配置文件以后,我们就可以通过下面的命令去创建部署,这里文件我命名为webserverPod.yaml:

kubectl apply -f webserverPod.yaml

理解了什么是对象和对象怎么创建部署以后,我们接下来通过例子来实践一下。

一个Nginx服务示例

1.创建namespace对象nginx-namespace.yaml:

apiVersion: v1kind: Namespacemetadata:  name: nginx-test  labels:    name: label-test

执行下面命令创建:

kubectl create -f nginx-namespace.yamlkubetcl get namespace

结果如下图:

2.创建Pod对象,这里不直接创建 Pod, 通过controller创建pod,nginx-deployment.yaml:

apiVersion: apps/v1kind: Deploymentmetadata:  namespace: nginx-test  name: nginx-deploymentspec:  selector:    matchLabels:      app: nginx  replicas: 2 #这里要求部署 2 个Pod  template:    metadata:      labels:        app: nginx    spec:      containers:      - name: nginx        image: nginx:alpine        ports:        - containerPort: 80

执行下面命令创建:

kubectl create -f nginx-deployment.yamlkubectl get deployment -n nginx-test// 查看Pod的状态以及Ip等信息kubectl get pods -o wide -n nginx-test // 也可以通过下面这个查询Podkubectl get pods -n nginx-test

结果如下图:

创建service对象,nginx-service.yaml:

apiVersion: v1kind: Servicemetadata:  namespace: nginx-test  name: nginx-servicespec:  selector:    app: nginx  type: NodePort  ports:  - protocol: TCP    port: 80    targetPort: 80

执行下面命令创建:

kubectl create -f nginx-service.yamlkubectl get svc nginx-service -o wide  -n nginx-test

结果如下图:

然后进入节点后curl http://10.105.251.12,当然我们也可以指定端口比如我们指定宿主机的端口为30082,修改上面的nginx-service.yaml如下:

apiVersion: v1kind: Servicemetadata:  namespace: nginx-test  name: nginx-servicespec:  selector:    app: nginx  type: NodePort    ports:  - protocol: TCP    port: 80    targetPort: 80    nodePort: 30082

然后执行kubectl apply -f nginx-service.yaml修改,我们在去查看service的时候如下:

然后curl http://127.0.0.1:30082,一样成功。

好了关于k8s对象与定义对象和部署就先到这里。这篇文章主要简单的介绍了怎么去部署nginx一个服务,以及什么是k8s对象,下一篇重点介绍kubectl的常用命令。

转载:风向阅读 - Kubernetes 对象以及部署nginx服务示例(四)

关键词: