Pod
运行中的一组容器,Pod是k8s中应用的最小单位。
kubectl run mynginx --image=nginx查看default名称空间的podkubectl get pod描述kubectl describe pod podname删除#kubectl delete pod podname1 podname2 -n namespace (默认是default)查看pod日志kubectl logs podname每个pod k8s都会分配一个独立的ipkubectl get pod -owide
:::info 集群中的任意一个机器以及任意的应用都能通过pod分配的ip来访问这个pod :::
#指定api版本标签apiVersion: v1#定义类型kind: Pod#定义元数据信息(名称,ns,标签等)metadata:labels: #定义资源标签 pod的run: mynginxname: mynginxnamespace: default#定义资源需要的参数属性spec:containers: #定义容器属性- image: nginx #镜像版本name: mynginx #容器名
kubectl apply -f mynginx.yaml
多容器Pod
apiVersion: v1
kind: Pod
metafata:
labels:
run: myapp
name: myapp
spec:
containerss:
- image: nginx
name: nginx
- image: tomcat:8.5.68
name: tomcat
Deployment
多副本
kubectl create deployment my-dep --image=nginx --replicas=3
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: my-dep
name: my-dep
spec:
replicas: 3 #副本数量
selector: #定义标签选择器
matchLabels: #定义匹配标签
app: my-dep #匹配上面的标签,需要与labels中的app一致
template: #定义模板,如果有多个模板所有副本的属性会按照模板配置进行匹配
metadata:
labels:
app: my-dep
spec:
containers:
- image: nginx
扩容
kubectl scale --replicas=5 deployment/my-dep
或者修改文件
kubectl edit deployment my-dep
#修改 replicas
自愈&故障转移
- 停机
- 删除pod
- 容器崩溃
- ……
滚动更新
#-- record 记录操作
kubectl set image deployment/my-dep nginx=nginx:1.16.1 --record
#查看deployment状态
kubectl rollout status deployment/my-dep
版本回退
#查看历史记录
kubectl rollout history deployment/my-dep
#查看某个历史详情
kubectl rollout history deployment/my-dep --revision=2
#回滚(回到上次)
kubectl rollout undo deployment/my-dep
#回滚(回到指定版本)
kubectl rollout undo deployment/my-dep --to-revision=2
其它工作负载
service
将一组Pods公开为网络服务的抽象方法
#暴露Deploy
kubectl expose deployment my-dep --port=8000 --target-port=80
#使用标签检索Pod
kubectl get pod -l app=my-dep
apiVersion: v1
kind: Service
metadata:
labels:
app: my-dep
name: my-dep
spec:
selector:
app: my-dep
ports:
- port: 8000
protocol: TCP
targetPort: 80
ClusterIP
Service的IP地址,此为虚拟IP地址。外部网络无法ping通,只有kubernetes集群内部访问使用。
#等同于没有--typed
kubectl expose deployment my-dep --port=8000 --target-port=80 --type=ClusterIP
apiVersion: v1
kind: Service
metadata:
labels:
app: my-dep
name: my-dep
spec:
ports:
- port: 8000
protocol: TCP
targetPort: 80
selector:
app: my-dep
type: ClusterIP
NodePort
每个Service都会在Node节点上开通一个端口,外部可以通过NodeIP:NodePort即可访问Service里的Pod,和我们访问服务器部署的项目一样,IP:端口/项目名
kubectl expose deployment my-dep --port=8000 --target-port=80 --type=NodePort
apiVersion: v1
kind: Service
metadata:
labels:
app: my-dep
name: my-dep
spec:
ports:
- port: 8000
protocol: TCP
targetPort: 80
selector:
app: my-dep
type: NodePort
NodePort范围在30000-32767之间
kubectl get svc 查看service
