755 July 21, 2024, 6:52 p.m.

Шпаргалка по kubernetes

Задачи:

  1. Установить Kubernetes
  2. Создать конфигурацию, состоящую из Deploymen, HorizontalPodAutoscaler, Service, ConfigMap

Нужно создать на DNS сервере или в файле hosts соответствия, на примере таких:

  • 192.168.254.10 c1-control-plane
  • 192.168.254.11 c1-worker-1
  • 192.168.254.12 c1-worker-2

Загружаем необходимые модули и делаем необходимые настройки

cat << EOF | sudo tee /etc/modules-load.d/containerd.conf
overlay
br_netfilter
EOF
cat << EOF | sudo tee /etc/sysctl.d/99-kubernetes-cri.conf
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
EOF

Отключаем swap – это требуется для кубика

sudo sed -i '/swap/d' /etc/fstab
swapoff -a

Применяем новые настройки или перезагружаем сервер

modprobe overlay
modprobe br_netfilter
sysctl –system

Устанавливаем NTP сервер

apt install -y chrony

Устанавливаем containerd

apt install -y curl gpg lsb-release apparmor apparmor-utils
curl -fsSL https://download.docker.com/linux/debian/gpg |  gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
apt update
apt-get install -y containerd.io
mkdir -p /etc/containerd
containerd config default | tee /etc/containerd/config.toml

Редактируем файл /etc/containerd/config.toml Добавляем параметр SystemdCgroup = true к [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options] чтобы получилось

[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
SystemdCgroup = true
systemctl restart containerd

Установка главных компонентов

apt-get install -y apt-transport-https ca-certificates curl
curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg
echo "deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | tee /etc/apt/sources.list.d/kubernetes.list
apt-get update
apt install iptables libiptc0/stable libxtables12/stable
apt-get install -y kubelet=1.21.0-00 kubeadm=1.21.0-00 kubectl=1.21.0-00
apt-mark hold kubelet kubeadm kubectl

Следующие команды запускаются только на Мастер-сервере

kubeadm init --pod-network-cidr 172.20.0.0/16 --kubernetes-version 1.21.0
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml

Вывод команды исполняем на worker сервере

kubeadm token create --print-join-command
kubectl get nodes

Основные команды: Показать список подов

kubectl get pods

Показать список всех подов

kubectl get pods -A

Отображать состояние подов в интерактивном режиме

kubectl get pods -w

Вывод событий кластера

kubectl get events -w

Создать под с портом 80 и образом nginx:latest

kubectl run hello –image=nginx:latest –port=80

Вывод подробной информации о поде

kubectl describe pods hello 

Вывести журнал событий пода, если в контейнере указан tail будет отображаться он

kubectl logs hello

Вход в контейнер

kubectl exec it hello bash

Применение манифеста из файла

kubectl apply -f hello.yaml

Удаление манифеста из фала

kubectl delete -f hello.yaml

Отобразить список развертываний

kubectl get deploy

Вывести список реплик

kubectl get rs

Создание развертывания

kubectl create deploy hello –image nginx:latest

Вывод описания развертывания

kubectl describe deploy hello

Создание нескольких копий

kubectl scale deploy hello –replicas 4

Настройка автомасштабирования

kubectl autoscale deploy hello –min=10 –max=15 –cpu-percent=80

Вывод информации по после команды выше

kubectl get hpa

Замена образа в развертывании

kubectl set image deploy/hello nginx=httpd:latest –record

Вывод статуса обновления

kubectl rollout status deploy/hello

Вывод список хранимых копий

kubectl rollout history deploy/hello

Отменить последнее обновление

kubectl rollout undo deploy/hello

Откат к определенной версии

kubectl rollout undo deploy/hello –to-version=3

Обновление образа из репозитория

kubectl rollout restart deploy/hello

Удаление развертывания

kubectl delete deploy hello

Создание сервиса

kubectl expose deploy hello –type=ClusterIP/NodePort/LoadBalancer –port 80

Пример конфига, php-my-admin нужно заменить

apiVersion : apps/v1
kind: Deployment
metadata:
  name: php-my-admin-deployment-autoscaling
  labels:
    app : php-my-admin-deployment
spec:
  selector:
    matchLabels:
      project: php-my-admin
  template:
    metadata:
      labels:
        project: php-my-admin   # Service will look for those PODS Labels!!!
    spec:
      containers:
        - name : php-my-admin-web
          image: h963z57/phpmyadmin:main
          imagePullPolicy: "Always"
          ports:
            - containerPort: 80 
          volumeMounts:
          - name: config-php-my-admin
            mountPath: /mnt
      volumes:
      - name: config-php-my-admin
        configMap:
          name: php-my-admin-configmap
---
apiVersion: autoscaling/v2beta1
kind: HorizontalPodAutoscaler
metadata:
  name: php-my-admin-autoscaling
spec:
  scaleTargetRef:
    apiVersion: apps/v2beta1v1
    kind: Deployment
    name: php-my-admin-deployment-autoscaling
  minReplicas: 1
  maxReplicas: 2
  metrics:
  - type: Resource
    resource:
      name: cpu
      targetAverageUtilization: 70
  - type: Resource
    resource:
      name: memory
      targetAverageUtilization: 80
---
apiVersion: v1
kind: Service
metadata:
  name: php-my-admin-autoscaling-pod-service
  labels:
     env  : prod
     owner: h963z57
spec:
  selector:
    project: php-my-admin      # Selecting PODs with those Labels
  ports:
    - name      : app-listener
      protocol  : TCP
      port      : 80  # Port on Load Balancer
      targetPort: 80  # Port on Pod
      nodePort: 30007
#  clusterIP: 10.105.214.244
  type: NodePort
---
apiVersion: v1
kind: ConfigMap
metadata:
  name: php-my-admin-configmap
data:
  config.inc.php: |
    <Указываем текст конфигурационного файла>

Источники