编写资源清单
调用api
格式如下:
apiVersion: group/version //指明api资源属于哪个群组和版本,同一个组可以有多个版本
$ kubectl api-versions //查询命令
kind: //标记创建的资源类型,k8s主要支持以下资源类别
Pod,ReplicaSet,Deployment,StatefulSet,DaemonSet,Job,Cronjob
metadata: //元数据
name: //对像名称
namespace: //对象属于哪个命名空间
labels: //指定资源标签,标签是一种键值数据
spec: //定义目标资源的期望状态
kubectl explain pod
//查询帮助文档
kubectl explain pod.metadata 继续查看
删掉之前的所有部署
示例一:创建简单的pod
[root@server2 ~]# cat pod.yml
apiVersion: v1
kind: Pod
metadata:
name: nginx
namespace: default
spec:
containers:
- name: nginx
image: myapp:v1
imagePullPolicy: IfNotPresent
kubectl apply -f pod.yml
创建
kubectl delete -f pod.yml
删除
示例二:创建控制器
注解: 镜像拉取策略: imagePullPolicy: IfNotPresent 当本地有镜像,不拉取
每个容器在建立的时候都会继承相应的标签,控制器通过匹配标签监控pod,副本数
[root@server2 ~]# cat pod.yml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx
namespace: default
spec:
replicas: 3
selector:
matchLabels:
run: nginx
template:
metadata:
labels:
run: nginx
spec:
containers:
- name: nginx
image: myapp:v1
imagePullPolicy: IfNotPresent
kubectl apply -f pod.yml
创建
在资源清单里面能够重复使用,在改变副本数,及镜像版本的更新,直接在文件里面改变参数即可
一个pod也可以用多个容器,
将命令直接输出成yaml格式,复制粘贴
示例三。资源limit(上限消耗),request(最少)
如果超过资源上限,会被kill掉
[root@server2 ~]# cat pod2.yml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx
namespace: default
spec:
replicas: 2
selector:
matchLabels:
run: nginx
template:
metadata:
labels:
run: nginx
spec:
containers:
- name: nginx
image: myapp:v1
imagePullPolicy: IfNotPresent
resources:
requests:
cpu: 100m #1/10的cpu
memory: 100Mi #至少有
limits:
cpu: 0.5 #500m 0.5个
memory: 512Mi
restartpolicy 默认总是always, 当退出的时候,默认重启
[root@server2 ~]# kubectl attach demo -it
Defaulting container name to demo.
Use 'kubectl describe pod/demo -n default' to see all of the containers in this pod.
If you don't see a command prompt, try pressing enter.
/ # Session ended, resume using 'kubectl attach demo -c demo -i -t' command when the pod is running
[root@server2 ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
demo 1/1 Running 4 3h15m
示例四、假设有两个节点,将pod指定节点
在此位置修改
spec:
nodeName: server3
#nodeName: server3
或者
标签
nodeSelector
kubernetes.io/hostname=server4
示例五:hostNetwork 继承主机网络
spec:
#nodeName: server3
hostNetwork: True
修改的位置
直接访问到主机名
示例六:两个容器,资源共享 (注意不要有网络冲突)
标签:
$
kubectl get pod --show-labels
//查看标签
NAME READY STATUS RESTARTS AGE LABELS
demo 2/2 Running 0 8s app=demo
$kubectl get pod -l app
//过滤包含app的标签
NAME READY STATUS RESTARTS AGE
demo 2/2 Running 0 34s
$ kubectl get pod -L app
NAME READY STATUS RESTARTS AGE APP
demo 2/2 Running 0 39s demo
$kubectl label pod demo version=v1
//打标签
pod/demo labeled
pod 也可以节点也可以执行
$
kubectl label pod demo app=myapp --overwrite
//更改标签
pod/demo labeled
$ kubectl get pod --show-labels
NAME READY STATUS RESTARTS AGE LABELS
demo 2/2 Running 0 5m40s app=myapp,version=v1
删除标签
节点标签选择器
$ kubectl label nodes server2 disktype=ssd
node/server2 labeled
$ kubectl get nodes -l disktype
NAME STATUS ROLES AGE VERSION
server2 Ready <none> 6d v1.17.2
在yaml文件中增加标签选择器