Kubernetes 对象以及部署nginx服务示例(四)
什么是 Kubernetes 对象?
在k8s中管理员与平台交互的最重要方式之一就是创建和管理 Kubernetes 对象
,对象有助于帮助用户部署应用程序和维护集群。
理解 Kubernetes 对象
的另一种方法是将它们视为类实例
。每个创建的对象都引用一个预定义的类,该类告诉 api server
如何处理系统资源并与特定组件进行通信。那么这些对象都包含哪些呢?这篇文章就通过一些实例来说明对象怎么使用,或者怎么去定义对象。
在Kubernetes
中对象都包含namespaces
、pod
、deployments
、volumes
以及secrets
等。
要查看 Kubernetes
集群中可用对象列表,可通过 kubectl
命令查看:
kubectl api-resources
执行命令后,可以看到如下一部分对象列表。这里只是截取了一小部分。
那么这些对象都是怎么产生的呢,或者怎么创建的呢?继续看。
首先我们在创建对象的时候,一般都是使用 YAML
或 JSON
在文件中描述想要的内容(所需状态),它称为对象规范。
下面先来一个Pod
对象规范示例(YAML):
# Pod spec
apiVersion: v1
kind: Pod
metadata:
name: webserver-pod
spec:
containers:
- name: webserver
image: nginx:latest
ports:
- containerPort: 80
在上面的例子中给出了很多字段,这些字段解释如下:
apiVersion
:对象的Kubernetes API 版本
kind
: 对象种类。e.g.Pod
、Deployment
、Service
、Configmap
等metadata
:元数据,用于唯一标识和描述Kubernetes
对象。一些常见添加到对象中的关键元数据labels
,name
,namespace
,annotations
等spec
:在 Kubernetes 对象定义的spec
部分中,声明创建的对象所需状态和特征
上面这几个字段在定义对象中都是通用的。
当然还有很多字段我们这里就不做介绍了,可以通过执行如下命令查看各个字段的意思:
kubectl explain pods
这里是列举了pod字段的含义,你也可以查看services
、namespaces
等等。
定义好对象配置文件以后,我们就可以通过下面的命令去创建部署,这里文件我命名为webserverPod.yaml
:
kubectl apply -f webserverPod.yaml
理解了什么是对象和对象怎么创建部署以后,我们接下来通过例子来实践一下。
一个Nginx服务示例
1.创建namespace
对象nginx-namespace.yaml
:
apiVersion: v1
kind: Namespace
metadata:
name: nginx-test
labels:
name: label-test
执行下面命令创建:
kubectl create -f nginx-namespace.yaml
kubetcl get namespace
结果如下图:
2.创建Pod
对象,这里不直接创建 Pod, 通过controller创建pod,nginx-deployment.yaml
:
apiVersion: apps/v1
kind: Deployment
metadata:
namespace: nginx-test
name: nginx-deployment
spec:
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.yaml
kubectl get deployment -n nginx-test
// 查看Pod的状态以及Ip等信息
kubectl get pods -o wide -n nginx-test
// 也可以通过下面这个查询Pod
kubectl get pods -n nginx-test
结果如下图:
创建service
对象,nginx-service.yaml
:
apiVersion: v1
kind: Service
metadata:
namespace: nginx-test
name: nginx-service
spec:
selector:
app: nginx
type: NodePort
ports:
- protocol: TCP
port: 80
targetPort: 80
执行下面命令创建:
kubectl create -f nginx-service.yaml
kubectl get svc nginx-service -o wide -n nginx-test
结果如下图:
然后进入节点后curl http://10.105.251.12
,当然我们也可以指定端口比如我们指定宿主机的端口为30082
,修改上面的nginx-service.yaml
如下:
apiVersion: v1
kind: Service
metadata:
namespace: nginx-test
name: nginx-service
spec:
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
的常用命令。