kubernetes资源对象
有一个RESTful的api,可用GET,PUT,DELETE,POST,等方式完成操作
相关命令,kubectl run,get,edit
相关资源如下:
workload:Pod,ReplicaSet,Deployment,StatefulSet,DaemonSet,Job,Cronjob
服务发现,均衡:Service,Ingress
配置与存储: Volume,CSI
ConfigMap,Secret
DownwardAPI
集群级资源
namespace,Node,Role,ClusterRole,RoleBinding,ClusterRoleBinding
元数据性资源
HPA,PodTemplate,LimitRange
通过如下命令查看pod的定义语句:
kubectl get pod podname -o yaml
主要字段:
apiVersion: v1
Kind: Pod
metadata: --元数据定义
spec: --规格配置,定义期望资源对象所处的状态
spec.containers <[]OBject> -required-
- name <string>
image <string>
imagePullPolicy <string> 三个选项: Always Never IfNoePresent
标签是latest,则该选项必须是Always,创建后不可更改
status: --对象当前的状态
apiserver仅接受JSON格式的资源定义
yaml格式提供的配置清单,apiserver可自动将其转为json格式,而后再提交
kubectl api-versions -- 查看有那些api版本
大部分资源的配置清单有5个大的资源:
1)apiVersion: group/version $ kubectl api-versions 2)kind: 资源类别 3)metadata: 元数据 name 对象名词 namespace 所属名称空间 lables 自建标签 ,最长253个字节 annotations 资源注解
每个资源的引用PATH
selfLink: /api/v1/namespaces/default/pods/mysql-45wl2
selflink格式: /api/(GROUP/VERSION)/namespaces/NAMESPACE/TYPE/NAME
4)spec :期望的状态,disired state
查看定义 kubectl explain pod.spec.containers
对于类型为OBject的对象,可持续在后面增加查询字段,该类对象的子集,没部分开始要以“-”开头,如
containers:
- name: myapp
image: mysql:v1.7
5)status: 当前状态
写第一个pod
vi fist-ood.yaml
apiVersion: v1Kind: Pod
meatdata: name: pod-demo namespace:default labels: app: myapp tier: frontend spec: containers: - name: myapp image: tomcat:latest
imagePullPolicy: IfNotPresent
ports:
- name: http
containerPort: 80
protocol: TCP
- name: https
containerPort: 443
protocol: TCP
- name: busybox image: busybox:latest command: - "/bin/sh" - "-c" - "sleep 3600"
登陆进去查看容器日志:
kubectl exec -it pod-demo -c myapp /bin/bash
资源配置清单:
自主式pod资源
资源的清单格式:
一级字段: apiVersion(group/version) ,分为alpha,v1beta1,v1beta2,v1,v2等版本
kind,分为pod
metadata, 内容name,namespace,labels,annotaions
spec,内容包括必选项containers,(name, image,imagePullPolicy)
status,当前状态,只读的
为容器设置启动时要执行的命令和参数: command args
如果要覆盖默认的 Entrypoint 与 Cmd,需要遵循如下规则:
-
如果在容器配置中没有设置
command或者args,那么将使用 Docker 镜像自带的命令及其入参。 -
如果在容器配置中只设置了
command但是没有设置args,那么容器启动时只会执行该命令,Docker 镜像中自带的命令及其入参会被忽略。 -
如果在容器配置中只设置了
args,那么 Docker 镜像中自带的命令会使用该新入参作为其执行时的入参。 -
如果在容器配置中同时设置了
command与args,那么 Docker 镜像中自带的命令及其入参会被忽略。容器启动时只会执行配置中设置的命令,并使用配置中设置的入参作为命令的入参。
链接地址:https://kubernetes.io/zh/docs/tasks/inject-data-application/define-command-argument-container/
标签:
key values的长度为63
key: 只能使用 字母,数字,_,-,. 5类字符,且只能以字母或数字开头和结尾,中间不限制
value: 可以为空
相关命令:
kubectl get pods --show-labels #查看有标签的pod
kubectl get pods -L app #查看有具体某个值的标签的pod的值
kubectl get pods -L app,run #现实多个标签的值
kubectl label pods pod-demo release=product # 为具体pod打个标签
kubectl get pods -l app --show-labels #查看所打出的标签
如果需要再次修改标签,需要增加参数--overwrite
kubectl label pods pod-demo release=stable --overwrite # 再次修改标签
标签选择器:
等值关系:使用=,==,!=
kubectl get pods -l release=stable --show-labels
kubectl get pods -l release=stable,app=myapp
集合关系:
KEY in (VALUE1,VALUE2,VALUE3,......) ### kubectl get pods -l 'release in (stable,product)'
KEY not in (VALUE1,VALUE2,......)
!KEY # 不存在此键
标签选择器内嵌字段匹配:
matchLabels: 直接给定键值,
matchExpressions: 基于给定的表达式来定义使用标签表达式,[ key:"KEY",operator:"OPERATOR",values:VAL1,VAL2,...]
操作符号: in notin :值必须为非空列表
exsits notexsits:values必须为空列表
nodeSelector <map[string] string>
节点标签选择器
nodeName 制定pod运行在该node上
annotations 资源注解,著名是谁编写的
常见pod状态:
pending
running
faild
Succeded
unknown
可以在pod启动后做一个post start的action,在容器运行过程中执行2个检查:liveness probe and readiness probe ;可以在容器关闭前做pre stop的action
pod生命周期中的重要行为:
容器初始化
容器探测:
liveness
readiness
liftcycle
restartPolicy:
Always ,OnFailuser,Never (Default to Always )
ExecAction: exec
TCPSocketAction: tcpSocket
HTTPGetAction: httpGet
第一个Pod资源控制器:
apiVersion: apps/v1 kind: Deployment metadata: name: myapp-deploy namespace: default spec: replicas: 2 selector: matchLabels: app: myapp release: canary template: metadata: labels: app: myapp release: canary spec: containers: - name: myapp image: tomcat ports: - name: http containerPort: 80
pod控制器包括:
ReplicationController:
ReplicatSet
Deployment
Job
Cronjob
StatefulSet
TPR: Third Party Resourcs, 1.2+,1.7
CDR: Custom Defined Resources, 1.8+
deploymeng相关管理命令:
kubectl get deploy # 查看deploy 信息
kubectl get deploy -o wide # 查看deploy的详细信息
kubectl rollout history deployment my-app # 查看指定deploy的历史版本信息
kubectl rollout --help # 查看回滚版本命令rollout的帮助信息
kubectl patch --help #查看以补丁方式更新deploy的帮助信息
通过补丁的方式更新deploy
kubectl patch deployment myapp-deploy -p '{"spec":{"replicas":3}}'
设置更新策略,使用到spec.strategy.rollingUpdate下面的两个参数maxSurge,maxUnavaliable
kubectl patch deployment myapp-deploy -p '{"spec":{"strategy":{"rollingUpdate":{"maxSurge":1,"maxUnavalible":0}}}}'
更改deploy的image
kubectl set image deployment myapp-deploy myapp=tomcat:8.0 && kubectl rollout pause deployment myapp-deploy
使用如下命令监视更新情况:
kubectl get pods -l app=myapp -w
kubectl rollout status deployment myapp-deploy
如下命令让更新继续
kubectl rollout resume deployment myapp-deploy
使用如下命令看更新后的版本
kubectl get rs -o wide
关于回滚版本:
查看可回滚的版本
kubectl rollout history deployment myapp-deploy
回滚到第一个版本
kubectl rollout undo deployment myapp-deploy --to-revision=1
DaemonSet管理命令
查看帮助信息 kubectl explain ds
第一个DaemonSeapiVersion: apps/v1
kind: Deployment
metadata:
name: redis
namespace: default
spec:
replicas: 1
selector:
matchLabels:
app: redis
role: logstor
template:
metadata:
labels:
app: redis
role: logstor
spec:
containers:
- name: redis
image: redis:4.0-alpine
ports:
- name: redis
containerPort: 6379
---
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: myapp-ds
namespace: default
spec:
selector:
matchLabels:
app: busybox
release: stable
template:
metadata:
labels:
app: busybox
release: stable
spec:
containers:
- name: busybox
image: busybox
env:
- name: REDIS_HOST
value: redis.defualt.svc.cluster.local
- name: REDIS_LOG_DEVEL
value: info
接下来用命令行发布服务:
kubectl expose deployment redis --port=6379
进入redis 的pod查看,可以看到6379端口已经在运行和监听
kubectl exec -it redis-588694bf8c-p7xjn -- /bin/sh
/data # netstat -tnl
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:6379 0.0.0.0:* LISTEN
tcp 0 0 :::6379 :::* LISTEN
查看建造过程
kubectl describe ds myapp-ds
更新daemonsets
kubectl set image daemonsets myapp-ds tomcat=tomcat:8.0
浙公网安备 33010602011771号