Мне нужен был небольшой инструмент для локального изучения 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
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
Весь этот код конфигурации доступен в этом репозитории, я надеюсь, что вы получите такое же удовольствие, как и я, от использования этого удивительного инструмента.