Это 10-й день моего участия в Gengwen Challenge.Подробности о мероприятии:Обновить вызов
Список конфигурации семи контроллеров
7.1 Контроллер набора реплик
См.: kubectl объясняет набор реплик.
- спецификация списка
apiVersion <string> # api 版本号,一般为 apps/v1
kind <string> # 资源类别,标记创建什么类型的资源
metadata <Object> # POD 元数据
spec <Object> # 元数据
7.1.1 Спецификация replicaset.spec
-
Количество копий реплик, указать количество
-
selector Label selector, вы можете использовать matchLabels, matchExpressions два типа селекторов для выбора целевого POD
matchLabels:直接给定键值
matchExpressions:基于给定的表达式来定义使用标签选择器:{key:"KEY",operator:"OPERATOR",value:[VAL1,VAL2,...]}
使用 key 与 value 进行 operator 运算,复合条件的才被选择
操作符:
In、NotIn:其 value 列表必须有值
Exists、NotExists:其 value 必须为空
- Шаблон шаблона, который определяет объект POD, этот объект состоит только из двух частей: pod.metadata и pod.spec.
7.1.2 Пример листинга
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: myrs
namespace: default
spec:
replicas: 2
selector:
matchLabels:
app: myapp
release: canary
template:
metadata:
name: myapp-pod # 这个其实没用,因为创建的 POD 以 rs 的名字开头
labels:
app: myapp # 标签一定要符合 replicaset 标签选择器的规则,否则将陷入创建 pod 的死循环,直到资源耗尽
release: canary
spec:
containers:
- name: myapp-containers
image: ikubernetes/myapp:v1
ports:
- name: http
containerPort: 80
7.2 Контроллер развертывания
Развертывание реализует функции, управляя ReplicaSet. Помимо поддержки расширения и сжатия ReplicaSet, оно также поддерживает последовательное обновление и откат и т. д. Оно также обеспечивает декларативную конфигурацию, которую мы используем чаще всего каждый день. Он используется для управления приложениями без сохранения состояния.
Развертывание реализуется путем управления несколькими наборами реплик во время последовательного обновления, а наборы реплик управляют несколькими устройствами POD. Несколько наборов реплик эквивалентны нескольким версиям приложения.
- Спецификацию манифеста см. в разделе: kubectl объясняет развертывание.
apiVersion <string> # apps/v1
kind <string> # 资源类别,标记创建什么类型的资源
metadata <Object> # POD 元数据
spec <Object> # 元数据
7.2.1 Спецификация объекта replicaset.spec
-
replicas Количество реплик, указать количество
-
selector Label selector, вы можете использовать matchLabels, matchExpressions два типа селекторов для выбора целевого POD
matchLabels:直接给定键值
matchExpressions:基于给定的表达式来定义使用标签选择器:{key:"KEY",operator:"OPERATOR",value:[VAL1,VAL2,...]}
使用 key 与 value 进行 operator 运算,复合条件的才被选择
操作符:
In、NotIn:其 value 列表必须有值
Exists、NotExists:其 value 必须为空
-
Шаблон шаблона, который определяет объект POD, этот объект состоит только из двух частей: pod.metadata и pod.spec.
-
стратегия обновления стратегии, поддержка непрерывного обновления, метод обновления, поддерживающий непрерывное обновление
type: # 更新类型,Recreate 替换更新,RollingUpdate 滚动更新策略
rollingUpdate: # 滚动更新时候的策略,这是默认的更新策略
maxSurge: # 滚动更新时候允许临时超出多少个,可以指定数量或者百分比,默认 25%
maxUnavailable: # 最多允许多少个 POD 不可用,默认 25%
-
Воссоздать: заменить обновление сначала удалит старую группу контейнеров, создаст новую группу контейнеров, службы прерываются во время процесса обновления.
-
RollingUppdate: обновление прокатки постепенно заменит экземпляр старой версии с экземпляром новой версии. В процессе обновления бизнес-трафик будет загружен на стручках старых и новых версий одновременно, поэтому бизнес будет не прерывается.
-
ревизияHistoryLimit Максимальное количество обновленных исторических версий для сохранения после непрерывного обновления, значение представляет собой число
-
paused Определяет, будет ли обновление приостановлено после его запуска.
7.2.2 Пример листинга
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp-deploy
namespace: default
spec:
replicas: 2
selector:
matchLabels:
app: myapp
release: canary
template:
metadata:
labels:
app: myapp
release: canary
spec:
containers:
- name: myapp
image: ikubernetes/myapp:v1
ports:
- name: http
containerPort: 80
7.2.3 Об обновлении
- Измените файл манифеста напрямую, kubectl apply -f deployment.yaml
- Используйте патч kubectl, чтобы предоставить обновленный контент в формате json.
kubectl patch deployment myapp-deploy -p '{"spec":{"replicas":5}}' # 修改 POD 副本数量
kubectl patch deployment myapp-deploy -p '{"spec":{"strategy":{"rollingUpdate":{"maxSurge":1,"maxUnavailable":0}}}}' # 修改更新策略
- обновить только образ kubectl set image
kubectl set image deployment myapp-deploy myapp=ikubernetes/myapp:v3
7.2.4 Имитация канареечного выпуска
- Когда обновление только запущено, процесс обновления приостанавливается, далее можно обновить только одно, которое реализует добавление канареечной версии в кластер
kubectl set image deployment myapp-deploy myapp=ikubernetes/myapp:v3 && kubectl rollout pause deployment myapp-deploy
- Просмотр состояния контроллера, который был приостановлен в обновлении, и вы можете увидеть приостановленное развертывание.
kubectl rollout status deployment myapp-deploy
Waiting for deployment "myapp-deploy" rollout to finish: 1 out of 5 new replicas have been updated...
等待部署"myapp-deploy"部署完成: 5个新副本中的1个已更新...
- Если с канарейкой проблем нет, то продолжить можно с помощью команды для продолжения обновления
kubectl rollout resume deployment myapp-deploy
7.2.5 Политика обновления
- Максимальная недоступность равна 0 и может временно превысить 1 при обновлении.
kubectl patch deployment myapp-deploy -p '{"spec":{"strategy":{"rollingUpdate":{"maxSurge":1,"maxUnavailable":0}}}}'
7.2.6 Об откате
- rollout undo — команда отката, по умолчанию — откат к предыдущей версии
kubectl rollout undo deployment myapp-deploy
- Просмотр версий, которые можно откатить
kubectl rollout history deployment myapp-deploy
- rollout undo указывает версию для отката
kubectl rollout undo deployment myapp-deploy --to-revision=2
- Посмотреть текущую рабочую версию
kubectl get rs -o wide
7.3 Контроллер DaemonSet
- Спецификация манифеста, см. kubectl, объясните daemonset
apiVersion <string> # apps/v1
kind <string> # 资源类别,标记创建什么类型的资源
metadata <Object> # POD 元数据
spec <Object> # 元数据
7.3.1 Спецификация DaemonSet.spec
Здесь перечислены только отличия
- Стратегия обновления updateStrategy, поддержка последовательного обновления, поддержка метода непрерывного обновления, последовательное обновление каждого узла по умолчанию
rollingUpdate # 滚动更新,它只有一个 rollingUpdate 参数,表示每次更新几个 node 上的 DaemonSet 任务
OnDelete # 在删除时更新
7.3.2 Пример листинга
apiVersion: apps/v1
kind: Deployment
metadata:
name: redis
namespace: default
spec:
replicas: 1
selector:
matchLabels:
app: redis
role: logstor
template:
metadata:
labels:
app: redis
role: logstor
spec:
containers:
- name: redis
image: redis:4.0-alpine
ports:
- name: redis
containerPort: 6379
--- # 可以使用 --- 来分隔多个记录
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: filebeat-daemonset
namespace: default
spec:
selector:
matchLabels:
app: filebeat
release: stalbe
template:
metadata:
labels:
app: filebeat
release: stalbe
spec:
containers:
- name: filebeat
image: ikubernetes/filebeat:5.6.5-alpine
env: # 向容器传递环境变量
- name: REDIS_HOST # 容器内的环境变量名称
value: redis.default.svc.cluster.local # 环境变量值,指向 redis service
- name: REDIS_LOG_LEVEL
value: info
7.3.3 Об обновлении
- Обновите образ контейнера filebeat под контроллером daemonset filebeat-daemonset
kubectl set image daemonsets filebeat-daemonset filebeat=ikubernetes/filebeat:5.6.6-alpine
разное
Публикуйте свои заметки по адресу:GitHub.com/RedHat Series/Арвин…Добро пожаловать в один клик