K8s-Deployment 使用
K8s-Deployment使用Deployment运行一个Deployment[root@master ~]# kubectlrunnginx-1--image=nginx--replicas=2kubectl run --generator=deployment/apps.v1 is DEPRECATED and will be removed in a future version. Use
K8s-Deployment 使用
Deployment
运行一个Deployment
[root@master ~]# kubectl run nginx-1 --image=nginx --replicas=2
kubectl run --generator=deployment/apps.v1 is DEPRECATED and will be removed in a future version. Use kubectl run --generator=run-pod/v1 or kubectl create instead.
deployment.apps/nginx-1 created
查看Deployment 状态
[root@master ~]# kubectl get deployments.apps nginx-1
NAME READY UP-TO-DATE AVAILABLE AGE
nginx-1 2/2 2 2 85s
详细查看
[root@master ~]# kubectl describe deployments.apps nginx-1
Name: nginx-1
Namespace: default
CreationTimestamp: Wed, 15 Jul 2020 19:06:34 +0800
Labels: run=nginx-1
Annotations: deployment.kubernetes.io/revision: 1
Selector: run=nginx-1
Replicas: 2 desired | 2 updated | 2 total | 2 available | 0 unavailable
StrategyType: RollingUpdate
MinReadySeconds: 0
RollingUpdateStrategy: 25% max unavailable, 25% max surge
Pod Template:
Labels: run=nginx-1
Containers:
nginx-1:
Image: nginx
Port: <none>
Host Port: <none>
Environment: <none>
Mounts: <none>
Volumes: <none>
Conditions:
Type Status Reason
---- ------ ------
Available True MinimumReplicasAvailable
Progressing True NewReplicaSetAvailable
OldReplicaSets: <none>
NewReplicaSet: nginx-1-56756dd7cf (2/2 replicas created)
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal ScalingReplicaSet 2m5s deployment-controller Scaled up replica set nginx-1-56756dd7cf to 2
详细查看副本资源
[root@master ~]# kubectl get replicasets.apps nginx-1-56756dd7cf
NAME DESIRED CURRENT READY AGE
nginx-1-56756dd7cf 2 2 2 4m41s
详细的
[root@master ~]# kubectl describe replicasets.apps nginx-1-56756dd7cf
Name: nginx-1-56756dd7cf
Namespace: default
Selector: pod-template-hash=56756dd7cf,run=nginx-1
Labels: pod-template-hash=56756dd7cf
run=nginx-1
Annotations: deployment.kubernetes.io/desired-replicas: 2
deployment.kubernetes.io/max-replicas: 3
deployment.kubernetes.io/revision: 1
Controlled By: Deployment/nginx-1
Replicas: 2 current / 2 desired
Pods Status: 2 Running / 0 Waiting / 0 Succeeded / 0 Failed
Pod Template:
Labels: pod-template-hash=56756dd7cf
run=nginx-1
Containers:
nginx-1:
Image: nginx
Port: <none>
Host Port: <none>
Environment: <none>
Mounts: <none>
Volumes: <none>
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal SuccessfulCreate 6m6s replicaset-controller Created pod: nginx-1-56756dd7cf-mg9v4
Normal SuccessfulCreate 6m6s replicaset-controller Created pod: nginx-1-56756dd7cf-665w6
查看Pod
[root@master ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
myweb-f867f887d-r2hds 1/1 Running 1 17h
myweb-f867f887d-x494f 1/1 Running 1 17h
myweb1-7f7b69fddb-252vk 1/1 Running 1 17h
myweb1-7f7b69fddb-6hb5k 1/1 Running 1 17h
nginx-1-56756dd7cf-665w6 1/1 Running 0 7m25s
nginx-1-56756dd7cf-mg9v4 1/1 Running 0 7m25s
查看某个pod的详细信息
[root@master ~]# kubectl describe pod nginx-1-56756dd7cf-665w6
Name: nginx-1-56756dd7cf-665w6
Namespace: default
Priority: 0
Node: node2/192.168.64.30
Start Time: Wed, 15 Jul 2020 19:06:34 +0800
Labels: pod-template-hash=56756dd7cf
run=nginx-1
Annotations: <none>
Status: Running
IP: 10.244.2.19
IPs:
IP: 10.244.2.19
Controlled By: ReplicaSet/nginx-1-56756dd7cf
Containers:
nginx-1:
Container ID: docker://fee7b3b0339a179f2a93c68e4d810393d67579204eaf75d4e3ec048dc368b91f
Image: nginx
Image ID: docker-pullable://nginx@sha256:a93c8a0b0974c967aebe868a186e5c205f4d3bcb5423a56559f2f9599074bbcd
Port: <none>
Host Port: <none>
State: Running
Started: Wed, 15 Jul 2020 19:06:52 +0800
Ready: True
Restart Count: 0
Environment: <none>
Mounts:
/var/run/secrets/kubernetes.io/serviceaccount from default-token-wnrfh (ro)
Conditions:
Type Status
Initialized True
Ready True
ContainersReady True
PodScheduled True
Volumes:
default-token-wnrfh:
Type: Secret (a volume populated by a Secret)
SecretName: default-token-wnrfh
Optional: false
QoS Class: BestEffort
Node-Selectors: <none>
Tolerations: node.kubernetes.io/not-ready:NoExecute for 300s
node.kubernetes.io/unreachable:NoExecute for 300s
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 8m20s default-scheduler Successfully assigned default/nginx-1-56756dd7cf-665w6 to node2
Normal Pulling 8m19s kubelet, node2 Pulling image "nginx"
Normal Pulled 8m3s kubelet, node2 Successfully pulled image "nginx"
Normal Created 8m3s kubelet, node2 Created container nginx-1
Normal Started 8m2s kubelet, node2 Started container nginx-1
总结过程
1.用户通过kubectl创建Deployment
2.Deployment创建ReplicaSet
3.ReplicaSet创建Pod
对象的命名方式:子对象的名字=父对象的名字+随机字符串或数字
K8s创建资源的两种方式
命令VS配置文件
1.用Kubectl命令直接创建
2.通过配置文件和kubectl apply创建
直接生成一个yml文件
[root@master ~]# kubectl create deployment nginx --image=nginx --dry-run -o yaml > web.yml
**文件内容:**
apiVersion: apps/v1
kind: Deployment
metadata:
creationTimestamp: null
labels:
app: nginx
name: nginx
spec:
replicas: 1
selector:
matchLabels:
app: nginx
strategy: {}
template:
metadata:
creationTimestamp: null
labels:
app: nginx
spec:
containers:
- image: nginx
name: nginx
resources: {}
status: {}
基于命令的方式
1.简单直观快捷,容易上手
2.适合临时检测或实验
基于配置文件的方式
1.配置文件描述了 What,即应用最终要达到的状态
2.配置文件提供了创建资源的模班,能够重复部署
3.可以像管理代码一样管理部署
4.适合正式的,跨环境的,规模化部署
5.这种方式要求熟悉配置文件的语法,有一定难度
Deployment YAML
编写一个yml文件
文件如下:
[root@master ~]# cat nginx.yml
apiVersion: apps/v1
kind: Deployment
metadata:
creationTimestamp: null
labels:
app: nginx
name: nginx
spec:
replicas: 1
selector:
matchLabels:
app: nginx
strategy: {}
template:
metadata:
creationTimestamp: null
labels:
app: nginx
spec:
containers:
- image: nginx
name: nginx
resources: {}
status: {}
apiVersion 是当前配置文件格式的版本
Kind 是要创键资源的类型
Metadata 是资源的元数据 name是必备的元数据项
Labels 资源标签
Name 资源名字
Spec 资源规格
Replicas 副本个数
Template Pod模板
metadata 定义Pod的元数据
labels Pod标签
spec Pod的规格
-image Pod使用那个镜像
name Pod名字
部署
[root@master ~]# kubectl apply -f nginx.yml
deployment.apps/nginx created
查看资源
[root@master ~]# kubectl get deployments.apps
NAME READY UP-TO-DATE AVAILABLE AGE
myweb 2/2 2 2 18h
myweb1 2/2 2 2 18h
nginx 1/1 1 1 89s
nginx-1 2/2 2 2 37m
[root@master ~]# kubectl get replicasets.apps
NAME DESIRED CURRENT READY AGE
myweb-7bfcd86fd6 0 0 0 18h
myweb-f867f887d 2 2 2 18h
myweb1-74755bd858 0 0 0 18h
myweb1-7f7b69fddb 2 2 2 18h
nginx-1-56756dd7cf 2 2 2 37m
nginx-86c57db685 1 1 1 91s
[root@master ~]# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
myweb-f867f887d-r2hds 1/1 Running 1 18h 10.244.2.15 node2 <none> <none>
myweb-f867f887d-x494f 1/1 Running 1 18h 10.244.2.17 node2 <none> <none>
myweb1-7f7b69fddb-252vk 1/1 Running 1 18h 10.244.2.16 node2 <none> <none>
myweb1-7f7b69fddb-6hb5k 1/1 Running 1 18h 10.244.2.18 node2 <none> <none>
nginx-1-56756dd7cf-665w6 1/1 Running 0 37m 10.244.2.19 node2 <none> <none>
nginx-1-56756dd7cf-mg9v4 1/1 Running 0 37m 10.244.1.2 node1 <none> <none>
nginx-86c57db685-bjk95 1/1 Running 0 104s 10.244.1.3 node1 <none>
删除资源有两种方法
第一种:
[root@master ~]# kubectl delete -f nginx.yml
deployment.apps "nginx" deleted
第二种:
[root@master ~]# kubectl delete deployment nginx-deployment
Scale Up/Down
伸缩只需修改 yml 文件对应的 副本数即可
将副本数改为 3 个
[root@master ~]# cat nginx.yml
apiVersion: apps/v1
kind: Deployment
metadata:
creationTimestamp: null
labels:
app: nginx
name: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
strategy: {}
template:
metadata:
creationTimestamp: null
labels:
app: nginx
spec:
containers:
- image: nginx
name: nginx
resources: {}
status: {}
部署
[root@master ~]# kubectl apply -f nginx.yml
deployment.apps/nginx created
查看副本
[root@master ~]# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
myweb-f867f887d-r2hds 1/1 Running 1 18h 10.244.2.15 node2 <none> <none>
myweb-f867f887d-x494f 1/1 Running 1 18h 10.244.2.17 node2 <none> <none>
myweb1-7f7b69fddb-252vk 1/1 Running 1 18h 10.244.2.16 node2 <none> <none>
myweb1-7f7b69fddb-6hb5k 1/1 Running 1 18h 10.244.2.18 node2 <none> <none>
nginx-1-56756dd7cf-665w6 1/1 Running 0 44m 10.244.2.19 node2 <none> <none>
nginx-1-56756dd7cf-mg9v4 1/1 Running 0 44m 10.244.1.2 node1 <none> <none>
nginx-86c57db685-8lqbd 1/1 Running 0 41s 10.244.1.4 node1 <none> <none>
nginx-86c57db685-knrl7 1/1 Running 0 41s 10.244.2.20 node2 <none> <none>
nginx-86c57db685-zm2m2 1/1 Running 0 41s 10.244.1.5 node1 <none>
K8s 的节点如果 down 了,会将其上面的 Pod 标记为 Unknown,并在其他节点上创建 Pod,维持总副本数,即使那个节点恢复了,Unknown 的 Pod 会被删除,不过运行 Pod 也不会调回那个节点了
出于安全考虑,默认配置下 k8s 不会将 Pod 调度到 master 节点,
如果想使用 master 节点,执行下面命令
[root@master ~]# kubectl taint node master node-role.kubernetes.io/master-
node/master untainted
恢复master only 的状态
[root@master ~]# kubectl taint node master node-role.kubernetes.io/master="":NoSchedule
node/master tainted
用 label 控制 Pod 的位置
label 可以将 Pod 部署到指定的节点上面
[root@master ~]# kubectl label nodes node1 disktype=ssd
node/node1 labeled
[root@master ~]# kubectl get nodes --show-labels
NAME STATUS ROLES AGE VERSION LABELS
master Ready master 19h v1.17.0 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=master,kubernetes.io/os=linux,node-role.kubernetes.io/master=
node1 Ready <none> 65m v1.17.0 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,disktype=ssd,kubernetes.io/arch=amd64,kubernetes.io/hostname=node1,kubernetes.io/os=linux
node2 Ready <none> 19h v1.17.0 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=node2,kubernetes.io/os=linux
disktype=ssd 已经添加到 node1 上面了
编辑 yml 文件指定
[root@master ~]# cat nginx.yml
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: nginx-deployment
name: nginx-deployment
spec:
replicas: 3
selector:
matchLabels:
app: nginx-deployment
template:
metadata:
creationTimestamp: null
labels:
app: nginx-deployment
spec:
containers:
- image: nginx
name: nginx
nodeSelector:
disktype: ssd
在 Pod 的模班 spec 里通过 nodeSelector 指定将此 Pod 部署到具有 label disktype=ssd 的 Node 上。
部署并查看
[root@master ~]# kubectl apply -f nginx.yml
deployment.apps/nginx-deployment created
[root@master ~]# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
myweb-f867f887d-r2hds 1/1 Running 1 18h 10.244.2.15 node2 <none> <none>
myweb-f867f887d-x494f 1/1 Running 1 18h 10.244.2.17 node2 <none> <none>
myweb1-7f7b69fddb-252vk 1/1 Running 1 18h 10.244.2.16 node2 <none> <none>
myweb1-7f7b69fddb-6hb5k 1/1 Running 1 18h 10.244.2.18 node2 <none> <none>
nginx-1-56756dd7cf-665w6 1/1 Running 0 55m 10.244.2.19 node2 <none> <none>
nginx-1-56756dd7cf-mg9v4 1/1 Running 0 55m 10.244.1.2 node1 <none> <none>
nginx-86c57db685-8lqbd 1/1 Running 0 12m 10.244.1.4 node1 <none> <none>
nginx-86c57db685-knrl7 1/1 Running 0 12m 10.244.2.20 node2 <none> <none>
nginx-86c57db685-zm2m2 1/1 Running 0 12m 10.244.1.5 node1 <none> <none>
nginx-deployment-65458ffb99-d6krj 0/1 ContainerCreating 0 20s <none>
删除label
[root@master ~]# kubectl label nodes node1 disktype-
node/node1 labeled
更多推荐
所有评论(0)