Rancher — пожалуй самая лучшая среда управления кластерам кубернетес.
Установка, удаление. Общие принципы работы. Вобщем начало…
Rancher — пожалуй самая лучшая среда управления кластерам кубернетес.
Установка, удаление. Общие принципы работы. Вобщем начало…
Файлы, используемые в видео.
Установка докера
cat > install-docker-ce8.sh << EOF2 #!/bin/bash dnf install tc ipvsadm -y systemctl stop NetworkManager.service systemctl disable NetworkManager.service dnf install network-scripts dnf config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repo dnf install docker-ce --nobest -y mkdir /etc/docker cat > /etc/docker/daemon.json <<EOF { "exec-opts": ["native.cgroupdriver=systemd"], "log-driver": "json-file", "log-opts": { "max-size": "100m" }, "storage-driver": "overlay2", "storage-opts": [ "overlay2.override_kernel_check=true" ], "iptables": false } EOF mkdir -p /etc/systemd/system/docker.service.d systemctl daemon-reload systemctl enable docker systemctl restart docker EOF2 chmod +x install-docker-ce8.sh
Установка kubernetes
cat > install-k8s-ce8.sh << EOF2 #!/bin/bash iptables -P FORWARD ACCEPT cat > /etc/modules-load.d/containerd.conf <<EOF overlay br_netfilter EOF modprobe overlay modprobe br_netfilter cat > /etc/sysctl.d/99-kubernetes-cri.conf <<EOF net.bridge.bridge-nf-call-iptables = 1 net.ipv4.ip_forward = 1 net.bridge.bridge-nf-call-ip6tables = 1 EOF sysctl --system cat > /etc/yum.repos.d/kubernetes.repo <<EOF [kubernetes] name=Kubernetes baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64 enabled=1 gpgcheck=1 repo_gpgcheck=1 gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg EOF dnf install -y kubelet kubeadm kubectl --disableexcludes=kubernetes systemctl enable kubelet.service EOF2 chmod +x install-k8s-ce8.sh
Инициализация кластера:
kubeadm init --pod-network-cidr=10.244.0.0/16
Создание токена на присоединения ноды:
kubeadm token create --print-join-command
Подготовка ноды к обслуживанию:
kubectl drain node2.kryukov.biz --ignore-daemonsets
Возврат ноды из обслуживания:
kubectl uncordon node2.kryukov.biz
Деплой контейнера в кубернетес: Pod — ReplicaSet — Deployment
Как использовать Service (ClusterIP, NodePort)
Что бы понять всю прелесть автоматизации, сначала делаем все руками.
Dashboard в kubernetes. Изначально планировал показать подключение дашборда в рамках предыдущего видео. И обычно, для доступа к нему достаточно двух команд в командной строке, но не в случае kubespray 2.12.
Установка последнего дашборда, права доступа и прочие мелочи.
Добавление, удаление ноды в кубернетес.
Добавляем при помощи kubespray. Удаляем руками.
В начале видео было заявлено включение дашборда. Но «в жизни все не так как на самом деле». Пришлось разбираться с глючным дашбордом, ставить новый и править доступы. Все это заняло достаточный кусок времени. Пришлось выносить в отдельное видео.
Вспомнил давно забытые преподские дела 🙂 да.
Записал начало видео курса по Кубернетес.
А что? Самоизоляция, она кого угодно достанет…
Создадим namespace artur, доступ к которому будем разрешать пользователю artur:
# kubectl create namespace artur
Как создавать пользователя было описано тут.
Создаём файл с описанием role и rolebindig — 01. yaml следующего содержания:
--- apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: namespace: artur # namespace к которому применяются огранияения name: artur-role rules: - apiGroups: [""] # "" indicates the core API group resources: ["pods", "services", "replicationcontrollers"] verbs: ["create", "get", "update", "list", "delete"] - apiGroups: [""] resources: ["pods/log"] verbs: ["get", "list"] - apiGroups: [""] resources: ["pods/exec"] verbs: ["create"] - apiGroups: ["apps"] resources: ["deployments","daemonsets","replicasets","statefulsets"] verbs: ["create", "get", "update", "patch", "list", "delete", "deploy"] - apiGroups: ["autoscaling"] resources: ["horizontalpodautoscalers"] verbs: ["create", "get", "update", "list", "delete"] - apiGroups: ["batch"] resources: ["jobs","cronjobs"] verbs: ["create", "get", "update", "list", "delete"]--- apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: artur-rb namespace: artur subjects: - kind: User name: artur apiGroup: rbac.authorization.k8s.io roleRef: kind: Role name: artur-role apiGroup: rbac.authorization.k8s.io
Создаем роли и биндинги в кубернетес.
# cubectl apply -f 01.yaml
Всё, что тут написано — это художественная обработка материалов доброго человека.
В принципе — это шпаргалка, что бы не забыть как все на самом деле происходит 🙂
Создаём временную директорию:
# mkdir tmp # cd tmp
Генерируем SSL ключ пользователя:
# openssl genrsa -out artur.key 4096
Создаём конфигурационный файл для openssl — csr.cnf следующего содержания:
[ req ] default_bits = 2048 prompt = no default_md = sha256 distinguished_name = dn [ dn ] CN = artur O = dev [ v3_ext ] authorityKeyIdentifier=keyid,issuer:always basicConstraints=CA:FALSE keyUsage=keyEncipherment,dataEncipherment extendedKeyUsage=serverAuth,clientAuth
Генерируем запрос на сертификат:
# openssl req -config csr.cnf -new -key artur.key -nodes -out artur.csr
Формируем запрос на сертификат в формате base64 и помещаем его в переменную среды окружения:
# export BASE64_CSR=$(cat artur.csr | base64 | tr -d '\n')
Создаём yaml файл csr.yaml с запросом на подпись следующего содержания:
apiVersion: certificates.k8s.io/v1beta1 kind: CertificateSigningRequest metadata: name: artur_csr spec: groups: - system:authenticated request: ${BASE64_CSR} usages: - digital signature - key encipherment - server auth - client auth
Помещаем запрос в кубернетес:
# cat csr.yaml | envsubst | kubectl apply -f -
Контролируем наличие запроса:
# kubectl get csr
Подписываем и генерируем сертификат:
# kubectl certificate approve artur_csr
Копируем во временную директорию файл ~/.kube/config и в разделе users удаляем из него строки client-certificate-data и client-key-data.
Добавляем в config строку с сертификатом клиента в формате base64:
# echo "client-certificate-data: $(kubectl get csr artur_csr -o jsonpath={.status.certificate})" >> config
В редакторе делаем правильное выравнивание строки. Также везде меняем пользователя на artur.
Добавляем в config файл ключ пользователя в формате base64:
# kubectl --kubeconfig ./config config set-credentials artur --client-key=artur.key --embed-certs=true
Смотрим получившийся конфигурационный файл:
# kubectl --kubeconfig ./config config view apiVersion: v1 clusters: - cluster: certificate-authority-data: DATA+OMITTED server: https://192.168.0.45:6443 name: cluster.local contexts: - context: cluster: cluster.local user: artur name: artur@cluster.local current-context: artur@cluster.local kind: Config preferences: {} users: - name: artur user: client-certificate-data: REDACTED client-key-data: REDACTED
Передаём файл config пользователю или копируем его в директорию ~/.kube пользователя.
Шпаргалка сделана по мотивам записок доброго человека.