json/Yaml转换工具
https://tools.fun/json2yaml.html
apiVersion: v1
kind: Pod
metadata:
name: test-pod #缩进表示对象 元数据
spec:
containers:#复数形式,可以写多个容器
- name: test-k8s #-转换成一个数组
image: ccr.ccs.tencentyun.com/k8s-tutorial/test-k8s:v1
转换
json
{
"apiVersion": "v1",
"kind": "Pod",
"metadata": {
"name": "test-pod"
},
"spec": {
"containers": [
{
"name": "test-k8s",
"image": "ccr.ccs.tencentyun.com/k8s-tutorial/test-k8s:v1"
}
]
}
}
实例
vim app.yaml
esc
: set pates 然后再i 进入编辑模式
apiVersion: apps/v1
kind: Deployment
metadata:
# 部署名字
name: test-k8s
spec:
replicas: 2
# 用来查找关联的 Pod,所有标签都匹配才行
selector:
matchLabels:
app: test-k8s
# 定义 Pod 相关数据
template:
metadata:
labels:
app: test-k8s
spec:
# 定义容器,可以多个
containers:
- name: test-k8s # 容器名字
image: ccr.ccs.tencentyun.com/k8s-tutorial/test-k8s:v1 # 镜像
保存
[root@k8s-master01 ~]# kubectl apply -f app.yaml
deployment.apps/test-k8s created
[root@k8s-master01 ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
test-k8s-68bb74d654-rhc2n 0/1 ContainerCreating 0 24s
test-k8s-68bb74d654-skgp8 0/1 ContainerCreating 0 24s
[root@k8s-master01 ~]# kubectl rollout history deployment test-k8s
deployment.apps/test-k8s
REVISION CHANGE-CAUSE
1 <none>
[root@k8s-master01 ~]# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
test-k8s-68bb74d654-6hnqf 1/1 Running 0 12m 10.244.0.17 k8s-node2 <none> <none>
test-k8s-68bb74d654-96ffq 1/1 Running 0 12m 10.244.0.11 k8s-node2 <none> <none>
test-k8s-68bb74d654-97rzm 1/1 Running 0 12m 10.244.0.13 k8s-node2 <none> <none>
test-k8s-68bb74d654-bk6km 1/1 Running 0 12m 10.244.0.16 k8s-node2 <none> <none>
test-k8s-68bb74d654-hwpxl 1/1 Running 0 12m 10.244.0.14 k8s-node2 <none> <none>
test-k8s-68bb74d654-jbpz5 1/1 Running 0 12m 10.244.0.18 k8s-node2 <none> <none>
test-k8s-68bb74d654-k97zx 1/1 Running 0 12m 10.244.0.20 k8s-node2 <none> <none>
test-k8s-68bb74d654-rcjc6 1/1 Running 0 12m 10.244.0.12 k8s-node2 <none> <none>
test-k8s-68bb74d654-xvxjh 1/1 Running 0 12m 10.244.0.15 k8s-node2 <none> <none>
test-k8s-68bb74d654-zbz2h 1/1 Running 0 12m 10.244.0.19 k8s-node2 <none> <none>
[root@k8s-master01 ~]# kubectl delete all --all
pod "test-k8s-68bb74d654-6hnqf" deleted
pod "test-k8s-68bb74d654-96ffq" deleted
pod "test-k8s-68bb74d654-97rzm" deleted
pod "test-k8s-68bb74d654-bk6km" deleted
命令、
# 部署应用
kubectl apply -f app.yaml
# 查看 deployment
kubectl get deployment
# 查看 pod
kubectl get pod -o wide
# 查看 pod 详情
kubectl describe pod pod-name
# 查看 log
kubectl logs pod-name
# 进入 Pod 容器终端, -c container-name 可以指定进入哪个容器。
kubectl exec -it pod-name -- bash
# 伸缩扩展副本
kubectl scale deployment test-k8s --replicas=5
# 把集群内端口映射到节点
kubectl port-forward pod-name 8090:8080
# 查看历史
kubectl rollout history deployment test-k8s
# 回到上个版本
kubectl rollout undo deployment test-k8s
# 回到指定版本
kubectl rollout undo deployment test-k8s --to-revision=2
# 删除部署
kubectl delete deployment test-k8s
# 查看全部
kubectl get all
# 重新部署
kubectl rollout restart deployment test-k8s
# 命令修改镜像,--record 表示把这个命令记录到操作历史中
kubectl set image deployment test-k8s test-k8s=ccr.ccs.tencentyun.com/k8s-tutorial/test-k8s:v2-with-error --record
# 暂停运行,暂停后,对 deployment 的修改不会立刻生效,恢复后才应用设置
kubectl rollout pause deployment test-k8s
# 恢复
kubectl rollout resume deployment test-k8s
# 输出到文件
kubectl get deployment test-k8s -o yaml >> app2.yaml
# 删除全部资源
kubectl delete all --all
将 Pod 指定到某个节点运行:nodeselector
限定 CPU、内存总量:文档
apiVersion: v1
kind: Pod
metadata:
name: nginx
labels:
env: test
spec:
containers:
- name: nginx
image: nginx
imagePullPolicy: IfNotPresent
nodeSelector:
disktype: ssd
工作负载分类
Deployment
适合无状态应用,所有pod等价,可替代
StatefulSet
有状态的应用,适合数据库这种类型。
DaemonSet
在每个节点上跑一个 Pod,可以用来做节点监控、节点日志收集等
Job & CronJob
Job 用来表达的是一次性的任务,而 CronJob 会根据其时间规划反复运行。
今日k8s学习总结,需要有一定语言编译基础的同学,像负载均衡,或者最新版本的kubernetes的并没有涉及,这个课件视频,也只是将kubernetes 的组件,环境,还是和云环境密切相关的。