Локальный кластер Kubernetes с помощью Kind

Локальный кластер Kubernetes с помощью Kind

Мне нужен был небольшой инструмент для локального изучения Kubernetes, есть несколько вариантов, но Kind (Kubernetes In Docker) был моим предпочтительным выбором, вам нужен только Docker, и вы можете очень легко справиться с настройкой Kubernetes.

Установка Kind

Установите его с помощью Brew :

brew install kind
# It works with Linux, Mac, Windows (with Docker Desktop and WSL2)

Затем вы можете создать кластер:

kind create cluster -n kind1 [--config conf.yml]
kind create cluster -n kind2

# Get the list of clusters
kind get clusters

# Select the cluster you want, by selecting context
k config get-contexts
k config use-context kind-kind1

# Display available addresses for the current cluster
k cluster-info

# Export logs about the cluster
kind export logs -n kind1

# You can delete clusters, when you want
kind delete cluster -n kind1
kind delete cluster -n kind2

Создание занимает несколько секунд, вы можете установить таймер, чтобы проверить, что :Kind cluster creation

Некоторые настройки для Kind

Kind предлагает возможность вносить конфигурацию в создаваемые вами кластеры.

Он работает поверх KubeADM, вы также можете реализовать специфическую конфигурацию для него.

Мы рассмотрим несколько простых примеров использования.

Экспликация Nginx, с сервисом NodePort

Создайте кластер:

cat <<EOF | kind create cluster -n kind1 --config -
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
  extraPortMappings:
  - containerPort: 30000
    hostPort: 30000
    protocol: TCP
EOF

Создайте развертывание и службу :

k create deployment nginx --image=nginx --port=80
k create service nodeport nginx --tcp=80:80 --node-port=30000

Теперь вы можете получить доступ к открытой службе :

curl localhost:30000

Кластер с одним ведущим и одним рабочим

Создайте кластер :

cat <<EOF | kind create cluster -n kind1 --config -
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
- role: worker
EOF

Кластер с контроллером Nginx

Создайте кластер :

cat <<EOF | kind create cluster -n kind1 --config -
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
name: kind
nodes:
- role: control-plane
  kubeadmConfigPatches:
  - |
    kind: InitConfiguration
    nodeRegistration:
      kubeletExtraArgs:
        node-labels: "ingress-ready=true"
  extraPortMappings:
  - containerPort: 80
    hostPort: 8080
    protocol: TCP
  - containerPort: 443
    hostPort: 44300
    protocol: TCP
EOF

Создайте ресурсы :

# install the Nginx ingress
k apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/main/deploy/static/provider/kind/deploy.yaml

# install the resources
cat <<EOF | k apply -f -
kind: Pod
apiVersion: v1
metadata:
  name: test-app
  labels:
    app: test-app
spec:
  containers:
  - name: test-app
    image: hashicorp/http-echo:latest
    args:
    - "-text=The test has been successful!"
--- 

kind: Service
apiVersion: v1
metadata:
  name: test-service
spec:
  selector:
    app: test-app
  ports:
  - port: 5678
--- 

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: test-ingress
spec:
  rules:
  - http:
      paths:
      - pathType: Prefix
        path: "/app"
        backend:
          service:
            name: test-service
            port:
              number: 5678
EOF

# forward port
k port-forward service/test-service 5678:5678

Теперь вы можете получить доступ к открытой службе :

curl localhost:5678

Весь этот код конфигурации доступен в этом репозитории, я надеюсь, что вы получите такое же удовольствие, как и я, от использования этого удивительного инструмента.