跳到主要内容

kubectl api-resources

Deployment

deployment-mysql.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
name: mysql
namespace: luffy
spec:
replicas: 1 #指定Pod副本数
selector: #指定Pod的选择器
matchLabels:
app: mysql
template:
metadata:
labels: #给Pod打label,必须和上方的matchLabels匹配
app: mysql
from: luffy
spec:
containers:
- name: mysql
image: mysql:5.7
args:
- --character-set-server=utf8mb4
- --collation-server=utf8mb4_unicode_ci
ports:
- containerPort: 3306
env:
- name: MYSQL_ROOT_PASSWORD
valueFrom:
secretKeyRef:
name: eladmin-secret
key: DB_PWD
- name: MYSQL_DATABASE
value: "eladmin"
resources:
requests:
memory: 200Mi
cpu: 50m
limits:
memory: 1Gi
cpu: 500m
readinessProbe:
tcpSocket:
port: 3306
initialDelaySeconds: 5
periodSeconds: 10
livenessProbe:
tcpSocket:
port: 3306
initialDelaySeconds: 15
periodSeconds: 20
volumeMounts:
- name: mysql-data
mountPath: /var/lib/mysql
volumes:
- name: mysql-data
hostPath:
path: /opt/mysql/
nodeSelector: # 使用节点选择器将Pod调度到指定label的节点
mysql: "true"

deploy-eladmin-api.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
name: eladmin-api
namespace: luffy
spec:
replicas: 1 #指定Pod副本数
selector: #指定Pod的选择器
matchLabels:
app: eladmin-api
template:
metadata:
labels: #给Pod打label
app: eladmin-api
spec:
imagePullSecrets:
- name: registry-172-21-65-226
containers:
- name: eladmin-api
image: 172.21.65.226:5000/eladmin/eladmin-api:v1
imagePullPolicy: IfNotPresent
env:
- name: DB_HOST
valueFrom:
configMapKeyRef:
name: eladmin
key: DB_HOST
- name: REDIS_HOST
valueFrom:
configMapKeyRef:
name: eladmin
key: REDIS_HOST
- name: REDIS_PORT
valueFrom:
configMapKeyRef:
name: eladmin
key: REDIS_PORT
- name: DB_USER
valueFrom:
secretKeyRef:
name: eladmin-secret
key: DB_USER
- name: DB_PWD
valueFrom:
secretKeyRef:
name: eladmin-secret
key: DB_PWD
ports:
- containerPort: 8000
resources:
requests:
memory: 200Mi
cpu: 50m
limits:
memory: 4Gi
cpu: 2
livenessProbe:
tcpSocket:
port: 8000
initialDelaySeconds: 20 # 容器启动后第一次执行探测是需要等待多少秒
periodSeconds: 15 # 执行探测的频率
timeoutSeconds: 3 # 探测超时时间
readinessProbe:
httpGet:
path: /auth/code
port: 8000
scheme: HTTP
initialDelaySeconds: 20
timeoutSeconds: 3
periodSeconds: 15

deployment-redis.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
name: redis
namespace: luffy
spec:
replicas: 1 #指定Pod副本数
selector: #指定Pod的选择器
matchLabels:
app: redis
template:
metadata:
labels: #给Pod打label,必须和上方的matchLabels匹配
app: redis
spec:
containers:
- name: redis
image: redis:3.2
ports:
- containerPort: 6379
resources:
requests:
memory: 100Mi
cpu: 50m
limits:
memory: 1Gi
cpu: 500m
readinessProbe:
tcpSocket:
port: 6379
initialDelaySeconds: 5
periodSeconds: 10
livenessProbe:
tcpSocket:
port: 6379
initialDelaySeconds: 15
periodSeconds: 20
创建Deployment
$ kubectl create -f deploy-eladmin-api.yaml
查看Deployment
# kubectl api-resources
$ kubectl -n luffy get deploy
NAME READY UP-TO-DATE AVAILABLE AGE
eladmin-api 1/1 1 1 6m41s
mysql 1/1 1 1 27m
redis 1/1 1 1 90s

* `NAME` 列出了集群中 Deployments 的名称。
* `READY`显示当前正在运行的副本数/期望的副本数。
* `UP-TO-DATE`显示已更新以实现期望状态的副本数。
* `AVAILABLE`显示应用程序可供用户使用的副本数。
* `AGE` 显示应用程序运行的时间量。

# 查看pod
$ kubectl -n luffy get po -owide

# 查看replicaSet
$ kubectl -n luffy get rs

副本保障机制

controller实时检测pod状态,并保障副本数一直处于期望的值。

## 删除pod,观察pod状态变化
$ kubectl -n luffy delete pod eladmin-api-5bff94959d-hxz2r

# 观察pod
$ kubectl get pods -o wide

## 设置两个副本, 或者通过kubectl -n luffy edit deploy eladmin-api的方式,最好通过修改文件,然后apply的方式,这样yaml文件可以保持同步
$ kubectl -n luffy scale deploy eladmin-api --replicas=2
deployment.extensions/eladmin-api scaled

# 观察pod
$ kubectl get pods -o wide

服务更新

修改服务,重新打tag模拟服务更新。

更新方式:

# 1. 修改yaml文件,然后apply更新应用
kubectl -n luffy apply -f deploy-eladmin-api.yaml

# 2 直接在线更新
kubectl -n luffy edit deploy eladmin-api

# 3 命令更新
kubectl -n luffy set image deploy eladmin-api eladmin-api=172.21.65.226:5000/eladmin/eladmin-api:v2 --record

修改文件测试:

$ docker build . -t 172.21.65.226:5000/eladmin/eladmin-api:v2 -f Dockerfile
$ docker push 172.21.65.226:5000/eladmin/eladmin-api:v2