kubernetes快速入门-资源清单及初识pod资源

k8s资源清单及初识pod资源

k8s资源对象

工作负载型资源(workload):Pod, ReplicaSet, Deployment, StatefZ 3 _ { 2ulSet, Da) W b Q =emonSet, Job, Cronjob,...

服务发现及负载均衡资源: Service, Ingress, ...

配置与存储相关资源: 存储卷( H ^ # { Volume),Cr g !SI(容器存储接口);Confi7 o # 0 6 ] . 2gMap,Secret, DownwardAPI

集群级资源:NameSpace, Node, Role, ClusterRole, RoleBinding, ClusterRolg : SeBinding

元数据型资源: HPA, PodTemplate, LimitR[ 4 s d a 9 &as g ^ W V $ G ynge

Pod资源配置格式

创建资源时apiserver仅接收JSON格式的资源X U 5 6定义,kubectl run这种方式运行一个资源,这种方式kube] # . ! o Kctl会自动把各个参数转换为JSON格式} b ) t Q r m,而在对k8s资源进行管K _ #理时直接使用JSON格式的数据不太让人容易维护和理解,所以使用yaml格式的w d [ .方式来编写,yaml能无损的转换为JSON格式。

要想获取一个已有资源的yaml格式文件,只需要在获取资源信息时加上-o yaml选项即可,如

# 获取一个pJ ; [ x #od资源的yaml格F g n 5 t -式的信息
k8s@node01:~$ kubectl get pod myapp-dep-cX e [988cf69-2dps2 -o yaml
# 获取一个node资源的yaml格式的信息
k8s@nc w { } J 3ode01:~$ kubectl get node node01 -o yaml

资源清单配置字段

大部分资源配置清单字段

apiVersion: group/veW s O t 4 1 Mrsion 表示使用apiServer的版本

apiVersion的版本分了许多组,每个组又有多个版本并存,如果省略"group",表示是核心组。`kubectl api-versions`可获取当前apiserver有哪些分组以及版本。

kind: &lU ? 7 | o ` D t tt;String> 资源类别

metadata: <ObjY V W 5 . ~ 2ect> 元数据

obj= b a 3 x )ect一般有以下对象:
name: 名称
namespace: 名称空间
labels: 标签
annotations: 注解
selfLink: 资源的自引用地址,格式为: /api/GROUP/VERSION/namespaces/NAMESPACE/TYV _ qPE/NAME,如:“selfLink: /api/v1/name[ ^ Lspaces/defaultU @ t - P _/pods/myapp-depe ? x { ~ !-cE g M C988cf6R S W *9-2dps2”

spec: <Object> 定义用户对资源期望的目标状态

status: <Objecte 8 ] I ^ + - o m&_ N i I _ r ) Yamp;gt; 资源的当前状态,该字段由k8s集群动态维护,用户不可定义该字段,对用户只读

资源配置帮助信息获取

资源配置清单中所用到的字段众多,能实现S % } m a % G |对资源的各种定义,帮助的获取对运维[ p k ; H U @ I 9人员尤其重要,好在kubectlV Y r ( l P y X j命令为我们提供了对各种资源定义时的帮助信息。

# 获取用户, ~ O能定义哪些资源类型
k8s@node01:~$ kubectl a] m } ) Spi-resources
# 使用explain选项查看指定类型资源的定义帮助信息
k8s@node01:~$ kubectl explain --help
# 查看pods资源的帮助
k8s@node01:~$+ = 6 kubectl explain pods
# 查看pods下spec1 ? m a ~字段的帮助,如果还有下一级,依此类推
k8s@node01:~$ kubectl explain pods.spec

自主式pod配置清单事例

k8s@node01:~/my_manifes@ l +ts$ pwd
/home/k8s/my_manifests
k8s@node01:~/my_mw { y Z +anifests$ cat pods-dw @ n $ N 2 yemo.yaml
apiVersion: v1
kind: Pod
metadata:
name: pod-demo
namespace: default
labels:
app: myapp
tier: frontend
spec:
containers:
- name: app
image: ikubernetes/myapp:v1
imagePullPolicy: IfNotPresent
- name: bbox
image: busybox:l+ [ Hatest
imi G NagePullPolicy: IfNotPresent
command:
- } / 7 H U 6"/bin/sh"
- "-c"
- "sleep 3600"

yaml语法说明:

使用缩进表示层级关系,缩进的空格数不重要,只要相V m u z Y I m J同层级的元6 ^ X素左对齐即可。如果是对象(Object),也叫映射(mapping)/哈希(hash)/字典(dictionary)。

对象键值对使用冒号结构表示 key: vaq 7 _ K Mlue,冒号后面要加一个空格,key的值是一个对象,则使用 key:{key1: vau e | f @ Q xlue1, key2: value2, ...},也可以使用缩进表示

key:^ u F
child-key: value
child-key2: value2

- 开头的行表示构成一个数组

- A
- B

事例中

labels:
app: myapp
tier: frontend
可以改写为
labels: {app: myapp, tier: frontend}
###########
containers:
- name: app
image: ikubernetes/myapp:v1
imagePullPoli, ^ W zcy: IfNotPresent
- name: bbox
image: busybox:latest
imagePullPolicy: IfNotPresent
command:
- "/bin/sh"
- "-c"
- "sleep 3600"
可改写为
containers: [{name: app, image: ikubernetes/myapp:v1, imagePullPolicy: IfNZ # , u ; : s /otPresent}, {name: bbox, imaq j b N 3ge: busybox:latest, command: ["/bin/y 1 E 9 Z F 9 + esh", "-c", "sl = S S yleep 3600"]}]

但实际中缩写yaml文件都保n X K x @持yaml@ a 5 7 C m的风格,不太会使用{}[]

应用yaml文件

k8s@node01:~/my_manifests$ kubectl createj p V ] ^ R  -f pods-demo.yaml  # 根据资源清单创建相应资源
pod/pod-demo created
k8s@node01:~$ kubectl get pods
NAME READY STATUS RESTARTS AGE
myapp-dep-c988cf69-2dps2 1/1 Running 0 3h13m
myapp-dep-c98y ~ 6 i .8cM ? 9f69-hjm8j 1/1 Running 0 3h14m
myapp-dep-c988cfH G ! u69-j56hp 1/1 Running 0 3h13m
mynginx-deploymG E V 6 m )ent-646959f957-jqq67 1/1 Running 0 3h13m
pod-demo 2/2 Running 0 84s
k8s@node01:~/my_manifests$ kubectl deleV - & S N ^ | Jte -f pods-demo.yaml # 根据资源清单删除相应的资源
poI i _ H ] . G i %d/pod-demo created