Kubernetes Cookbook 编程指南 中文版教程
创建时间:2018-12-07  访问量:3668  7  0

Kubernetes Cookbook 编程指南 中文版教程

配置文件的使用

kubernetes支持两种不同的文件格式YAML和JSON。每种格式都可以描述Kubernetes相同的功能。

开始

YAML和JSON都有官方网站来描述标准格式。

YAML

YAML格式是非常简单的,并且语法规则少;因此,它容易为人类读和写。了解更多关于YAML,你可以参考以下网站链接:

http://www.yaml.org/spec/1.2/spec.html

下面的例子使用了YAML格工设置nginx的Pod:

apiVersion: v1
kind: Pod
metadata:
    name: nginx
    labels:
    	name: nginx
spec:
    containers:
    - name: nginx
        image: nginx
        ports:
        - containerPort: 80

JSON

JSON格式也是简单并易于人类阅读的,便对程序更友好。因为它有数据类型(number,string,Boolean和object),它广泛用于系统间的数据交换。为了了解更多关于JSON的信息,你可以参考以下网站链接:

http://json.org/

下面关于Pod的例子与前面的YAML格式配置相同,但使用的是JSON格式:

{
    "apiVersion" : "v1",
    "kind" : "Pod",
    "metadata" : {
        "name" : "nginx",
        "labels": {
        	"name": "nginx"
        }
    },
    "spec" : {
        "containers" : [
            {
                "name" : "nginx",
                "image" : "nginx",
                "ports" : [
                    {
                        "containerPort": 80
                    }
                ]
            }
        ]
    }
}

如何去做...

Kubernetes有一个使用配置格式定义的schema;可以通过执行如下kubectl create命令在/tmp/kubectl.schema/目录下生成schema:

# cat pod.json
{
	"apiVersion" : "v1",
	"kind" : "Pod",
    "metadata" : {
        "name" : "nginx",
        "labels": {
        	"name": "nginx"
    	}
    },
    "spec" : {
        "containers" : [
            {
                "name" : "nginx",
                "image" : "nginx",
                "ports" : [
                    {
                        "containerPort": 80
                    }
                ]
    		}
    	]
    }
}

# kubectl create -f pod.json
pod "nginx" created

# ls -l /tmp/kubectl.schema/v1.1.3/api/v1/schema.json
-rw------- 2 root root 446224 Jan 24 04:50 /tmp/kubectl.schema/v1.1.3/
api/v1/schema.json

还有一种替代方法,因为Kubernetes也使用swagger (http:// swagger.io/)来生成REST API;因此,您可以通过http://:8080/swagger-ui/访问swagger-ui。

每个配置(例如,pods、复制控制器和服务)将在POST部分中进行描述,如下面的屏幕截图所示:

上面的swagger-ui截图,显示了Pod的定义。当你点击Model时,会显示项的类型,如string,array和整型,如下图所示。

有一些项标记为只读,如UID。Kubernetes生成这些项。如果你在配置文件中指定了这个项,它将会忽略。

它是如何工作的...

每个配置文件都有一些必填项需要被定义,如下所示:

Pods

类型 示例
apiVersion String v1
kind String Pod
metadata.name String my-nginx
spec v1.PodSpec  
v1.PodSpec.containers array[v1.Container]  
v1.Container.name String my-nginx
v1.Container.image String nginx

因此,最小的Pod的配置如下所示(YAML格式):

apiVersion: v1
kind: Pod
metadata:
	name: my-nginx
spec:
    containers:
    - name: my-nginx
    	image: nginx

副本控制器

类型 示例
apiVersion String v1
kind String ReplicationController
metadata.name String my-nginx-rc
spec v1.ReplicationControllerSpec  
v1.ReplicationControllerSpec.template v1.PodTempateSpec  
v1.PodTemplateSpec.metadata.labels Map of String app:nginx
v1.PodTempateSpec.spec v1.PodSpec  
v1.PodSpec.containers array[v1.Container] 与Pod相同

下面的示例是最小的副本控制器的配置(YAML格式):

apiVersion: v1
kind: ReplicationController
metadata:
	name: my-nginx-rc
spec:
    template:
        metadata:
            labels:
            	app: nginx
        spec:
            containers:
            - name: my-nginx
            	image: nginx

服务

类型 示例
apiVersion String v1
kind String Service
metadata.name String my-nginx-service
spec v1.ServiceSpec  
v1.ServiceSpec.selector Map of String sel:my-selector
v1.ServiceSpec.ports array[v1.ServicePort]  
v1.ServicePort.protocol String TCP
v1.ServicePort.port Integer 80

下面的例子是最小的服务配置(YAML格式):

apiVersion: v1
kind: Service
metadata:
	name: my-nginx
spec:
    selector:
    	sel: my-selector
    ports:
        - protocol: TCP
        	port: 80

还可以参考

本节描述了如何发现并理解一个配置语法。Kubernetes有一些详细选项用来定义容顺和组件。对于更多的详细信息,以下几节将描述了如何定义Pod、副本控制器和服务:

  • 第2章理解Kubernetes相关概念,Pod的使用、副本控制器的使用和服务的使用这几节