赞
踩
集群内部可以访问,外部无法直接访问
kubectl run nginx --image=myapp:v1
kubectl delete pod nginx
创建
kubectl create deployment nginx --image=myapp:v1
删除pod后会又自动创建一个新的pod
kubectl delete pod nginx-67f9d9c97f-qdgvq
kubectl delete deployments nginx
–replicas:在deployment控制器的基础上
kubectl scale deployment --replicas=2 nginx
ClusterIP:默认类型,自动分配一个仅集群内部可以访问的虚拟IP
kubectl expose deployment nginx --port=80
集群内部可以访问
集群外部不可访问
NodePort 暴露端口:外部客户端访问(可以通过NodeIP:NodePort来访问)
kubectl edit svc nginx
(修改 type: NodePort)
查看端口号kubectl get svc
内部访问集群
外部访问集群
创建时指定类型为NodePort:
kubectl expose deployment nginx --port=80 --type=NodePort
kubectl set image deployment nginx myapp=myapp:v2
kubectl rollout history deployment nginx
查看历史版本kubectl rollout undo deployment nginx --to-revision=1
回滚
kubectl api-versions
:查询命令
kubectl explain pod
查询帮助文档
apiVersion:group/version 指明api资源属于哪个群组和版本,同一个组可以有多个版本
kind:标记创建的资源类型
metadata:元数据
name:对象名称,
namespace:对象所属的命名空间,
labels:指定资源标签(键值数据)
spec:定义目标资源的期望状态
简单pod示例
kubectl apply -f pod.yml #创建
kubectl delete -f pod.yml #删除
#pod.yml
apiVersion: v1
kind: Pod
metadata:
name: nginx
namespace: default
spec:
containers:
- name: nginx
image: myapp:v1
imagePullPolicy: IfNotPresent
Deployment控制器示例
kubectl apply -f deployment.yml #创建
kubectl delete -f deployment.yml #删除
#deployment.yml apiVersion: apps/v1 kind: Deployment metadata: name: nginx namespace: default spec: replicas: 2 selector: matchLabels: run: nginx template: metadata: labels: run: nginx spec: #nodeSelector: # kubernetes.io/hostname: server3 #nodeName: server3 #hostNetwork: true containers: - name: nginx image: myapp:v1 imagePullPolicy: IfNotPresent resources: requests: cpu: 100m memory: 100Mi limits: cpu: 0.5 memory: 512Mi - name: busybox image: busybox imagePullPolicy: IfNotPresent stdin: true tty: true - name: busybox image: busybox imagePullPolicy: IfNotPresent stdin: true tty: true
cpu: 100m
memory: 100Mi
limits:
cpu: 0.5
memory: 512Mi
kubectl describe pod nginx-79cc587f-ntjdb
查看pod详细信息
nodeSelector:
kubernetes.io/hostname: server3
nodeName: server3#与前两行作用相同,选择其一即可
hostNetwork: true
- name: busybox
image: busybox
imagePullPolicy: IfNotPresent
stdin: true
tty: true
标签
kubectl label nodes server3 app=nginx
kubectl label nodes server3 app=myapp --overwrite
pod生命周期官方文档
phase取值 | 说明 |
---|---|
Pending(悬决) | Pod 已被 Kubernetes 系统接受,但有一个或者多个容器尚未创建亦未运行。此阶段包括等待 Pod 被调度的时间和通过网络下载镜像的时间, |
Running(运行中) | Pod 已经绑定到了某个节点,Pod 中所有的容器都已被创建。至少有一个容器仍在运行,或者正处于启动或重启状态。 |
Succeeded(成功) | Pod 中的所有容器都已成功终止,并且不会再重启。 |
Failed(失败) | Pod 中的所有容器都已终止,并且至少有一个容器是因为失败终止。也就是说,容器以非 0 状态退出或者被系统终止。 |
Unknown(未知) | 因为某些原因无法取得 Pod 的状态。这种情况通常是因为与 Pod 所在主机通信失败。 |
Waiting (等待)
Running(运行中)
Terminated(已终止)
三种探针:
示例1:存活探针
vim live.yml
#live.yml apiVersion: v1 kind: Pod metadata: labels: test: liveness name: liveness-exec spec: containers: - name: liveness image: busyboxplus args: - /bin/sh - -c - touch /tmp/healthy; sleep 30; rm -rf /tmp/healthy; sleep 600 livenessProbe: exec: command: - cat - /tmp/healthy initialDelaySeconds: 5 periodSeconds: 5
kubectl create -f live.yml
创建pod
kubectl describe pod liveness-exec
查看pod状态
kubectl get pod
已经重启
示例2
#live.yml apiVersion: v1 kind: Pod metadata: labels: test: liveness name: liveness-exec spec: containers: - name: liveness image: myapp:v1 livenessProbe:#存活探针 tcpSocket: port: 80#更改为8080 initialDelaySeconds: 2 periodSeconds: 3 readinessProbe:#就绪探针 httpGet: path: /hostname.html#更改为不存在的test.html port: 80 initialDelaySeconds: 3 periodSeconds: 3
init容器官方文档
vim init.yml
apiVersion: v1
kind: Pod
metadata:
name: myapp-pod
labels:
app: myapp
spec:
containers:
- name: myapp-container
image: myapp:v1
initContainers:
- name: init-myservice
image: busyboxplus
command: ['sh', '-c', "until nslookup myservice.default.svc.cluster.local; do echo waiting for myservice; sleep 2; done"]
kubectl create -f init.yml
无法解析域名,一直处于初始化状态
kubectl logs myapp-pod init-myservice
查看日志
vim service.yml
---
apiVersion: v1
kind: Service
metadata:
name: myservice
spec:
ports:
- protocol: TCP
port: 80
targetPort: 80
kubectl create -f service.yml
pod状态正常
一个 Deployment 为 Pods 和 ReplicaSets 提供声明式的更新能力。
适用于:
可以单独使用,但主要被Deployment用于协调pod创建、删除、更新的机制
工作原理
使得副本个数达到期望值
, 进而实现其存在价值。当 ReplicaSet需要创建新的 Pod 时,会使用所提供的 Pod 模板。vim ra.yml
apiVersion: apps/v1
kind: Deployment
metadata:
name: deployment
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
vim rs.yml
更改replicas: 6kubectl label pod deployment-6456d7c676-6wf7f app=myapp --overwrite
更改其中一个pod的标签为myapp,通过标签匹配,nginx数量不为3,新建标签为nginx的pod。vim rs.yml
3个标签为nginx的pod会滚动更新image: myapp:v2
原rs1回收,新建rs2
vim rs.yml
回滚image: myapp:v1
kubectl expose deployment deployment --port=80
暴露端口kubectl describe svc deployment
查看详情kubectl edit svc deployment
修改控制器标签 selector:
app: myapp
DaemonSet 确保全部(或者某些)节点上运行一个 Pod 的副本。 当有节点加入集群时, 也会为他们新增一个 Pod 。 当有节点从集群移除时,这些 Pod 也会被回收。删除 DaemonSet 将会删除它创建的所有 Pod。
DaemonSet 的一些典型用法:
一种简单的用法是为每种类型的守护进程在所有的节点上都启动一个 DaemonSet。 一个稍微复杂的用法是为同一种守护进程部署多个 DaemonSet;每个具有不同的标志, 并且对不同硬件类型具有不同的内存、CPU 要求.
vim daemonset.yml
每个节点一个,会自动分配每个节点一个
apiVersion: apps/v1 kind: DaemonSet metadata: name: daemonset-example labels: k8s-app: zabbix-agent spec: selector: matchLabels: name: zabbix-agent template: metadata: labels: name: zabbix-agent spec: containers: - name: zabbix-agent image: zabbix-agent
Job 会创建一个或者多个 Pods,并将继续重试 Pods 的执行,直到指定数量的 Pods 成功终止。 随着 Pods 成功结束,Job 跟踪记录成功完成的 Pods 个数。 当数量达到指定的成功个数阈值时,任务(即 Job)结束。 删除 Job 的操作会清除所创建的全部 Pods。
一种简单的使用场景下,你会创建一个 Job 对象以便以一种可靠的方式运行某 Pod 直到完成。 当第一个 Pod 失败或者被删除(比如因为节点硬件失效或者重启)时,Job 对象会启动一个新的 Pod。
vim job.yml
计算 π 到小数点后 2000 位,并将结果打印出来
apiVersion: batch/v1
kind: Job
metadata:
name: pi
spec:
template:
spec:
containers:
- name: pi
image: perl
command: ["perl", "-Mbignum=bpi", "-wle", "print bpi(2000)"]
restartPolicy: Never
backoffLimit: 4
vim cronjob.yml
每分钟打印出当前时间和问候消息
apiVersion: batch/v1beta1 kind: CronJob metadata: name: hello spec: schedule: "*/1 * * * *" jobTemplate: spec: template: spec: containers: - name: hello image: busyboxplus imagePullPolicy: IfNotPresent args: - /bin/sh - -c - date; echo Hello from the Kubernetes cluster restartPolicy: OnFailure
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。