title | permalink |
---|---|
С помощью Kubernetes |
usage/build/run_in_containers/use_kubernetes.html |
ПРИМЕЧАНИЕ: werf поддерживает сборку образов с использованием Docker-сервера или с использованием Buildah. Поддерживается сборка как Dockerfile-образов, так и stapel-образов через Buildah.
Убедитесь, что удовлетворены [системные требования]({{ "usage/build/buildah_mode.html#системные-требования" | true_relative_url }}) и выберите один из [доступных режимов работы]({{ "usage/build/run_in_containers/how_it_works.html#modes-of-operation" | true_relative_url }}) и перейдите к нему.
Дополнительные действия не требуются.
Дополнительные действия не требуются.
Ядро Linux без поддержки OverlayFS в режиме rootless и использование непривилегированного контейнера
Для подключения устройства /dev/fuse
в контейнерах под управлением werf необходим плагин Fuse device:
{% raw %}
kubectl apply -f - << EOF
---
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: fuse-device-plugin
namespace: kube-system
spec:
selector:
matchLabels:
name: fuse-device-plugin
template:
metadata:
labels:
name: fuse-device-plugin
spec:
hostNetwork: true
containers:
- image: soolaugust/fuse-device-plugin:v1.0
name: fuse-device-plugin-ctr
securityContext:
allowPrivilegeEscalation: false
capabilities:
drop: ["ALL"]
volumeMounts:
- name: device-plugin
mountPath: /var/lib/kubelet/device-plugins
volumes:
- name: device-plugin
hostPath:
path: /var/lib/kubelet/device-plugins
EOF
{% endraw %}
Подготовьте конфигурацию Docker в формате base64 для доступа к реестру.
# registrysecret.yaml
apiVersion: v1
kind: Secret
metadata:
name: registrysecret
data:
.dockerconfigjson: <base64 of ~/.docker/config.json>
type: kubernetes.io/dockerconfigjson
Создайте registrysecret
в пространстве имен приложения:
kubectl -n quickstart-application apply -f registrysecret.yaml
Service account необходим werf для доступа к кластеру Kubernetes при развертывании приложения.
# werf-service-account.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
name: werf
namespace: quickstart-application
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: werf
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: werf
namespace: quickstart-application
Создайте описанный выше service account werf
с ролью cluster-admin
в пространстве имен приложения:
kubectl -n quickstart-application apply -f werf-service-account.yaml
Выберите один из [доступных режимов работы]({{ "usage/build/run_in_containers/how_it_works.html#режимы=работы" | true_relative_url }}) и перейдите к нему.
Команда werf converge будет выполняться в специальном Pod'е. Обратите внимание, что CONTAINER_REGISTRY_REPO
следует заменить на реальный адрес репозитория реестра контейнеров, для которого на предыдущем шаге мы настраивали registrysecret
.
# werf-converge.yaml
apiVersion: v1
kind: Pod
metadata:
name: werf-converge
annotations:
"container.apparmor.security.beta.kubernetes.io/werf-converge": "unconfined"
spec:
serviceAccount: werf
automountServiceAccountToken: true
restartPolicy: Never
containers:
- name: werf-converge
image: registry.werf.io/werf/werf
args:
- "sh"
- "-ec"
- |
git clone --depth 1 https://github.com/werf/quickstart-application.git $HOME/quickstart-application &&
cd $HOME/quickstart-application &&
werf converge --release quickstart-application --repo CONTAINER_REGISTRY_REPO
env:
- name: WERF_NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
volumeMounts:
- mountPath: /home/build/.docker/
name: registrysecret
volumes:
- name: registrysecret
secret:
secretName: registrysecret
items:
- key: .dockerconfigjson
path: config.json
Создайте pod и разверните приложение в соответствующем пространстве имен:
kubectl -n quickstart-application apply -f werf-converge.yaml
kubectl -n quickstart-application logs -f werf-converge
Команда werf converge будет выполняться в специальном Pod'е. Обратите внимание, что CONTAINER_REGISTRY_REPO
следует заменить на реальный адрес репозитория реестра контейнеров, для которого на предыдущем шаге мы настраивали registrysecret
.
# werf-converge.yaml
apiVersion: v1
kind: Pod
metadata:
name: werf-converge
spec:
serviceAccount: werf
automountServiceAccountToken: true
restartPolicy: Never
containers:
- name: werf-converge
image: registry.werf.io/werf/werf
securityContext:
privileged: true
args:
- "sh"
- "-ec"
- |
git clone --depth 1 https://github.com/werf/quickstart-application.git $HOME/quickstart-application &&
cd $HOME/quickstart-application &&
werf converge --release quickstart-application --repo CONTAINER_REGISTRY_REPO
env:
- name: WERF_NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
volumeMounts:
- mountPath: /home/build/.docker/
name: registrysecret
volumes:
- name: registrysecret
secret:
secretName: registrysecret
items:
- key: .dockerconfigjson
path: config.json
Создайте pod и разверните приложение в соответствующем пространстве имен:
kubectl -n quickstart-application apply -f werf-converge.yaml
kubectl -n quickstart-application logs -f werf-converge
Ядро Linux без поддержки OverlayFS в режиме rootless и использование непривилегированного контейнера
Команда werf converge будет выполняться в специальном Pod'е. Обратите внимание, что CONTAINER_REGISTRY_REPO
следует заменить на реальный адрес репозитория реестра контейнеров, для которого на предыдущем шаге мы настраивали registrysecret
.
# werf-converge.yaml
apiVersion: v1
kind: Pod
metadata:
name: werf-converge
annotations:
"container.apparmor.security.beta.kubernetes.io/werf-converge": "unconfined"
spec:
serviceAccount: werf
automountServiceAccountToken: true
restartPolicy: Never
containers:
- name: werf-converge
image: registry.werf.io/werf/werf
resources:
limits:
github.com/fuse: 1
args:
- "sh"
- "-ec"
- |
git clone --depth 1 https://github.com/werf/quickstart-application.git $HOME/quickstart-application &&
cd $HOME/quickstart-application &&
werf converge --release quickstart-application --repo CONTAINER_REGISTRY_REPO
env:
- name: WERF_NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
volumeMounts:
- mountPath: /home/build/.docker/
name: registrysecret
volumes:
- name: registrysecret
secret:
secretName: registrysecret
items:
- key: .dockerconfigjson
path: config.json
Создайте pod и разверните приложение в целевом пространстве имен:
kubectl -n quickstart-application apply -f werf-converge.yaml
kubectl -n quickstart-application logs -f werf-converge
Если у вас возникли какие-либо сложности, пожалуйста, обратитесь к разделу [Устранение проблем]({{ "usage/build/run_in_containers/how_it_works.html#troubleshooting" | true_relative_url }})