MENU

K8S集群管理与资源编排 (03)

October 2, 2019 • Read: 1981 • kubernetes

本文适用于已具备K8S集群环境的童鞋阅读。

1、常用命令
111111.png
2、应用程序生命周期管理
222222222.png
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

兼总条贯 知至知终