Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
Next revisionBoth sides next revision
devops:skaffold [2021/02/18 18:48] – [Настройка деплоя во внешний кластер] admindevops:skaffold [2021/02/18 21:19] – [Настройка деплоя во внешний кластер] admin
Line 175: Line 175:
   namespace: vrm   namespace: vrm
 rules: rules:
-- apiGroups: ["", "extensions", "apps"]+- apiGroups: ["*"]
   resources: ["*"]   resources: ["*"]
   verbs: ["*"]   verbs: ["*"]
Line 195: Line 195:
 </code> </code>
 Дальше получаем имя токена: Дальше получаем имя токена:
-TOKEN_NAME=`kubectl get secret -n kube-system -o name | grep vrm-ns-admin-token`+  TOKEN_NAME=`kubectl get secret -n kube-system -o name | grep vrm-ns-admin-token`
 и его содержимое: и его содержимое:
-TOKEN=`kubectl get $TOKEN_NAME -n kube-system -o "jsonpath={.data.token}" | base64 -d`+  TOKEN=`kubectl get $TOKEN_NAME -n kube-system -o "jsonpath={.data.token}" | base64 -d` 
 +а также корневой сертификат кластера: 
 +  TOKEN_CA=`kubectl get $TOKEN_NAME -n kube-system -o "jsonpath={.data['ca\.crt']}"
 +и **URL** для **control plane**: 
 +  CONTROL_PLANE=`kubectl cluster-info | grep 'Kubernetes control plane' | awk '{print $NF}' | sed -r "s/[[:cntrl:]]\[([0-9]{1,3};)*[0-9]{1,3}m//g"
 +И, наконец, генерируем собственно сам **KUBECONFIG**: 
 +<code>cat <<EOF > ./vrm-admin-kubeconfig 
 +apiVersion: v1 
 +kind: Config 
 +preferences: {} 
 +# Define the cluster 
 +clusters: 
 +- cluster: 
 +    certificate-authority-data: $TOKEN_CA 
 +    server: $CONTROL_PLANE 
 +  name: cluster
  
 +# Define the user
 +users:
 +- name: vrm-ns-admin
 +  user:
 +    as-user-extra: {}
 +    client-key-data: $TOKEN_CA
 +    token: $TOKEN
 +
 +# Define the context: linking a user to a cluster
 +contexts:
 +- context:
 +    cluster: cluster
 +    namespace: vrm
 +    user: vrm-ns-admin
 +  name: vrm
 +
 +# Define current context
 +current-context: vrm
 +EOF</code>
 +Проверяем, что полученный **kubeconfig** работает:
 +  KUBECONFIG=./vrm-admin-kubeconfig kubectl get po -n vrm
 +Теперь - добавляем содержимое этого файла в свойтсвах проекта в переменную типа **File**. В итоге -содержимое файла будет доставлено в контейнер **skaffold**  в виде временного файла, а её значение будет указать на расположение этого файла.
 +А gitlab-ci.yml станет такой:
 +<code>services:
 +#  - name: docker.rdleas.ru/docker:dind
 +# Последнюю версию dind (20+) не удается использовать из-за ошибки: https://github.com/containerd/containerd/issues/4837
 +# Нужно обновлять container.d на хостах
 +# В остальном - всё уже готово. 
 +  - name: docker.rdleas.ru/docker:19-dind
 +    command: 
 +      - /bin/sh
 +      - -c
 +      - |
 +        openssl s_client -showcerts -connect docker.rdleas.ru:443 </dev/null 2>/dev/null | awk '/BEGIN/ { i++; } /BEGIN/, /END/ { print }' > /usr/local/share/ca-certificates/ca.crt
 +        update-ca-certificates
 +        unset DOCKER_TLS_CERTDIR
 +        dockerd-entrypoint.sh
 +
 +stages:
 +  - build
 +
 +variables:
 +  DOCKER_DRIVER: overlay2
 +  DOCKER_TLS_CERTDIR: ""
 +  DOCKER_HOST: tcp://0.0.0.0:2375
 +
 +build:
 +  image:
 +    name: docker.rdleas.ru/k8s-skaffold/skaffold:v1.19.0
 +  stage: build
 +  before_script:
 +    - docker login -u `echo $DOCKER_REGISTRY_LOGIN` -p `echo $DOCKER_REGISTRY_PASS` `echo $DOCKER_REGISTRY_URL`
 +#https://skaffold.dev/docs/references/cli/
 +  script:
 +    - | 
 +      openssl s_client -showcerts -connect ${DOCKER_REGISTRY_URL}:443 </dev/null 2>/dev/null | awk '/BEGIN/ { i++; } /BEGIN/, /END/ { print }' > /usr/local/share/ca-certificates/ca.crt
 +      update-ca-certificates
 +      env
 +      echo "waiting for the DinD..."
 +      timeout 60 bash -c 'until printf "" 2>>/dev/null >>/dev/tcp/$0/$1; do sleep 1; done' 0.0.0.0 2375
 +      case $CI_COMMIT_BRANCH in
 +        DEV)      
 +          VALUES="chart/values_dev.yaml" skaffold run -f skaffold-run.yaml --default-repo ${DOCKER_REGISTRY_URL}/vrm
 +        ;;
 +        TEST)
 +          VALUES="chart/values_test.yaml" \
 +          KUBECONFIG=$KUBECONFIG_TEST \
 +          skaffold run -f skaffold-run.yaml \
 +          --default-repo ${DOCKER_REGISTRY_URL}/vrm
 +        ;;
 +        PROD)
 +          KUBECONFIG=$KUBECONFIG_PROD \
 +          VALUES="chart/values_prod.yaml" \
 +          skaffold run -f skaffold-run.yaml \
 +          --default-repo ${DOCKER_REGISTRY_URL}/vrm
 +        ;;
 +        *)
 +          skaffold build -f skaffold-build.yaml
 +        ;;
 +      esac</code>
  • devops/skaffold.txt
  • Last modified: 2021/04/22 09:44
  • by admin