本文适用于已具备K8S集群环境的童鞋阅读。
1、常用命令
2、应用程序生命周期管理
2.1创建
kubectl run nginx --replicas=3 --image=nginx:1.14 --port=80
kubectl get deploy,pods
2.2发布
kubectl expose deployment nginx --port=80 --type=NodePort --target-port=80 --name=nginx-service
kubectl get service
2.3更新
kubectl set image deployment/nginx nginx=nginx:1.15
2.4回滚
kubectl rollout history deployment/nginx
kubectl rollout undo deployment/nginx
2.5 删除
kubectl delete deployment/nginx
kubectl delete svc/nginx-service
3、YAML
https://yaml.org/
YAML 是一种简洁的非标记语言
语法格式:
缩进表示层级关系
不支持制表符“tab” 缩进,使用空格缩进
通常开头缩进 2 个空格
字符后缩进 1 个空格,如冒号、逗号等
“---” 表示YAML格式,一个文件的开始
” 注释
查找资源
kubectl api-resources
通过命令生成yaml配置文件
kubectl run --image=nginx my-deploy -o yaml --dry-run > my-deploy.yaml
使用get命令导出配置文件
kubectl get deploy/nginx -o=yaml --export > my-deploy.yaml
查找Pod容器的字段
kubectl explain pods.spec.containers
3.1 参考官方文档通过YAML 创建一个nginx
Creating a Deployment
https://kubernetes.io/docs/concepts/workloads/controllers/deployment/
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.7.9
ports:
- containerPort: 80
3.2创建
kubectl create -f nginx-deployment.yaml
kubectl get pod
3.3发布
创建发布yaml
apiVersion: v1
kind: Service
metadata:
name: nginx-service
labels:
app: nginx
spec:
type: NodePort
ports:
- port: 80
targetPort: 80
selector:
app: nginx
执行发布
kubectl create -f nginx-services.yaml
查看
kubectl get svc
4、pod概念
4.1基本概念
最小部署单元
一组容器的集合(endpoint)
一个Pod中的容器共享网络命名空间
应用需要是无状态的
Infrastructure Container:基础容器 维护整个Pod网络空间
InitContainers:初始化容器 先于业务容器开始执行初始化工作
Containers:业务容器 ,业务无状态,容器启动无序,并行启动
4.2镜像拉取策略
IfNotPresent:默认值,镜像在宿主机上不存在时才拉取
Always:每次创建 Pod 都会重新拉取一次镜像
Never:Pod 永远不会主动拉取这个镜像
4.3资源限制
limit 是对资源的总限制最大不能超过总限制,request是在资源创建时最低分配资源。当前node只有满足request值时才有可能调度到当前node。
4.4参考官方文档创建案例
https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/
apiVersion: v1
kind: Pod
metadata:
name: frontend
spec:
containers:
- name: db
image: mysql
env:
- name: MYSQL_ROOT_PASSWORD
value: "password"
resources:
requests:
memory: "64Mi"
cpu: "250m"
limits:
memory: "128Mi"
cpu: "500m"
- name: wp
image: wordpress
resources:
requests:
memory: "64Mi"
cpu: "250m"
limits:
memory: "128Mi"
cpu: "500m"
查看创建过程
kubectl describe pod frontend