среда, 31 июля 2019 г.

git merge branch с master

Пример добавления изменений из ветки mybranch1 в ветку master.

git branch -b mybranch1 - создаем новую ветку, пропускаем этот шаг, если ветку уже создали.
git checkout mybranch1 - переходим в ветку mybranch1
git add . 
git commit -m "prometheus-chart"
git checkout master - переходим в ветку master
git merge mybranch1 - делаем merge в master ветку из mybranch1.
git push origin master - пушим измененный мастер в github

git tag

Иногда бывает необходимость пушить в git код под определенным тэгом. Например v2.0.

Примеры

1. git tag -a v2.0 -m 'v2.0' - создаем новый тэг v2.0
2. git push origin v2.0 - пушим новый тэг
3. git tag - посмотреть список тэгов



пятница, 26 июля 2019 г.

Kubernetes - nodeSelector запуска пода на определенной ноде



Иногда бывает необходимость запускать поды именно на какой-либо ноде...
Для этого использую nodeSelector.


1. kubectl label node YOURNODE1 hehe=fortest - создаю лэйбл с меткой hehe=fortest
2. kubectl get nodes --show-labels - получаем лейблы из нод

beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,hehe=fortest,kubernetes.io/arch=amd64,kubernetes.io/hostname=kubernetes1,kubernetes.io/os=linux,node-role.kubernetes.io/master=,node=master1

среда, 24 июля 2019 г.

Service account GCP для взаимодействия с Compute app

  1. Open the Google Cloud Platform Console Credentials page.
  2. If it's not already selected, select the project that you're creating credentials for.
  3. To set up a new service account, click New credentials and then select Service account key.
  4. Choose the service account to use for the key.
  5. Choose whether to download the service account's public/private key as a standard P12 file, or as a JSON file that can be loaded by a Google API client library.
подробнее тут: https://support.google.com/cloud/answer/6158849?hl=en&ref_topic=6262490#serviceaccounts

Необходимо получить доступы для Ansible к GCP, нашел мануал выше.

пятница, 19 июля 2019 г.

Continious Deployment через pod с kubectl

В данный момент играюсь с GitLab, Kubernetes и CI/CD.

Легенда:
Kubernetes 1.14.3
kubectl pod 1.14.3


Для того чтобы делать CD, нашел специально собранный для этого образ.

Для Continious Deployment в GitLab понадобится добавить следующие переменные в Settings > Variables.


воскресенье, 14 июля 2019 г.

kubeadm join: error execution phase check-etcd: etcd cluster is not healthy: context deadline exceeded

При присоединении нового мастера в кластер была ошибка выше.

Помогло следующее решение.

1) т.к etcd у меня запущен в поде, заходим в него через shell и удаляем лишний зависшее значение нода.

Легенда:

1. 10.132.0.2 - мастер нода с pod'ом etcd
2. 10.132.0.4 - зависший мастер который остался в etcd

В моем случае было: b87bf07b1961a4e7: name=kubernetes3 peerURLs=https://10.132.0.4:2380 clientURLs=https://10.132.0.4:2379 isLeader=false

=======================================================


etcdctl --endpoints https://10.132.0.2:2379 --ca-file /etc/kubernetes/pki/etcd/ca.crt --cert-file /etc/kubernetes/pki/etcd/server.crt --key-file /etc/kubernetes/pki/etcd/server.key member list 

etcdctl --endpoints https://10.132.0.2:2379 --ca-file /etc/kubernetes/pki/etcd/ca.crt --cert-file /etc/kubernetes/pki/etcd/server.crt --key-file /etc/kubernetes/pki/etcd/server.key member remove b87bf07b1961a4e7

среда, 10 июля 2019 г.

установка haproxy_exporter на ubuntu 18.10

1) качаем под свою архитектуру бинарник: https://github.com/prometheus/haproxy_exporter/releases/download/v0.10.0/haproxy_exporter-0.10.0.linux-amd64.tar.gz

2) распаковываем архив tar xvzf haproxy_exporter-0.10.0.linux-amd64.tar.gz

3) переходим в папку с бинарником и делаем его исполняемым cd haproxy_exporter.... && mv haproxy_exporter /usr/bin


4) пишем service для systemctl в /etc/systemd/system/haproxy_exporter.service

[Unit]
Description=haproxy_exporter

[Service]
ExecStart=/usr/bin/haproxy_exporter
WorkingDirectory=/usr/bin
TimeoutSec=15
Restart=always

[Install]

WantedBy=multi-user.target

5) запускаем... systemctl start haproxy_exporter.service

понедельник, 8 июля 2019 г.

опрашиваем curl'ом API kubernetes сервера

Понадобилось выяснить есть ли коннект к API кубера, нашел решение.


1) на сервере Kubernetes пишем: kubectl get secrets

2) получаем secret на подобие: default-token-xxxxx

3) создаем роль kube-admin.yaml и применяем его kubectl apply -f kube-admin.yaml

apiVersion: v1
kind: ServiceAccount
metadata:
  name: kube-admin
  namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
  name: kube-admin
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
- kind: ServiceAccount
  name: kube-admin
  namespace: kube-system

4) получаем токен: kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep gitlab-admin | awk '{print $1}')

5) получаем ключ:  kubectl get secret <secret name> -o jsonpath="{['data']['ca\.crt']}" | base64 --decode

6) на своем компе создаем файл ca.crt и вставляем туда полученный ключ и токен.

7) curl -k --cacert ca.crt -H "Authorization: Bearer eyJhb...тут будет токен" https://YOURIP:6443/api/v1/namespaces/default/pods

8)  получаем значения в JSON формате.


        "hostIP": "10.164.15.224",

        "podIP": "172.19.64.36",

        "startTime": "2019-07-04T09:15:58Z",
        "containerStatuses": [
          {
            "name": "wordpress",
            "state": {
              "running": {
                "startedAt": "2019-07-08T15:26:03Z"
              }
            },

среда, 3 июля 2019 г.

kubernetes добавить мастер в существующий кластер

1) пишем на главной мастер ноде (на котором делали kube-init) kubeadm init phase upload-certs --experimental-upload-certs

будет выведен ключ, например: 95edf5f97546419d4da994cf90927980f400938c1de596e7b9b1562c33dc361e

2) присодиняем мастер командой.

kubeadm join 192.168.XX.XX:6443 \
--token yyyyyyxxxxxxx \
--discovery-token-ca-cert-hash sha256:yyyyyyyyyyxxxxxx \
--experimental-control-plane \
--certificate-key 95edf5f97546419d4da994cf90927980f400938c1de596e7b9b1562c33dc361e 

где 192.168.ХХ.ХХ - айпи балансировщика или мастер ноды.