kubernetes full

Cài cụm kubernetes bằng kubespray: https://kubespray.io

VM cần cho cân bằng tải kubernetes:
1. Một VM cho kubespray, để cài kubespray, ansible (Server này chì cần cấu hình tối thiểu)
2. Một VM cho Load Balancer API-Server kubernetes (Server này cần cấu hình có network cao)
3. Các VM cho master và worker, đảm bảo có ít nhất 1 master và 1 worker.

Các config khi cài cụm:
Network plugin:
inventory/mycluster/group_vars/k8s_cluster/k8s-cluster.yml
kube_network_plugin: flannel

Addons:
inventory/mycluster/group_vars/k8s_cluster/addons.yml

Mở toàn bộ các thông số sau:

# Nginx ingress controller deployment
ingress_nginx_enabled: true
# ingress_nginx_host_network: false
ingress_publish_status_address: ""
ingress_nginx_nodeselector:
  kubernetes.io/os: "linux"
ingress_nginx_tolerations:
  - key: "node-role.kubernetes.io/master"
    operator: "Equal"
    value: ""
    effect: "NoSchedule"
  - key: "node-role.kubernetes.io/control-plane"
    operator: "Equal"
    value: ""
    effect: "NoSchedule"
ingress_nginx_namespace: "ingress-nginx"
ingress_nginx_insecure_port: 80
ingress_nginx_secure_port: 443
ingress_nginx_configmap:
  map-hash-bucket-size: "128"
  ssl-protocols: "TLSv1.2 TLSv1.3"
ingress_nginx_configmap_tcp_services:
  9000: "default/example-go:8080"
ingress_nginx_configmap_udp_services:
  53: "kube-system/coredns:53"
ingress_nginx_extra_args:
  - --default-ssl-certificate=default/foo-tls
ingress_nginx_termination_grace_period_seconds: 300
ingress_nginx_class: nginx

Chỉnh load balancer server:

group_vars/all/all.yaml
loadbalancer_apiserver:
  address: 192.168.63.9   # ip của VM Load Balancer
  port: 16443            # port nhận traffic của api-server trên VM Load Babancer

Chú ý:

Khi viết deployment thì viết cả Service NodePort ở trong đó luôn. Nếu viết NodePort ra file riêng thì nó sẽ dùng chung khi tạo một deployment với file riêng.
Cần thêm ssh của server kubespray để có thể kết nối được tới tất cả server master và worker.

Ví dụ về deployment file deploy.yaml (Trên VM master):

apiVersion: v1
kind: Service
metadata:
name: nginx-service
labels:
app: myapp
spec:
ports:
- port: 80
protocol: TCP
targetPort: 8080
selector:
app: myapp
sessionAffinity: None
type: NodePort
---
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: myapp
name: echo-deployment
spec:
replicas: 10
selector:
matchLabels:
app: myapp
strategy:
type: Recreate
template:
metadata:
labels:
app: myapp
spec:
containers:
- image: kicbase/echo-server:1.0
name: echo-server
ports:
- containerPort: 8080
protocol: TCP

Ví dụ về ingress.yaml file:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
  name: ingress
spec:
  rules:
  - host: test.tech
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: nginx-service
            port:
              number: 80
  - host: test1.tech
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: nginx-test
            port:
              number: 80

Cách lệnh thao tác trong kubernetes:

Lấy thông tin:
kubectl get pods -o wide
kubectl get svc -o wide
kubectl get ingress -o wide
kubectl get deploy -o wide
kubectl describe pods (Hiển thị all thông tin)
kubectl describe service SERVICE_NAME (Hiển thị all thông tin service)
Xoá:
kubectl delete pods --all (Xoá tất cả pods)
kubectl delete deploy --all (Xoá tất cả deploy)
kubectl delete service --all (Xoá tất cả service)
kubectl delete service SERVICE_NAME (Xoá service name)
kubectl delete all --all -n {namespace}

Sửa:
kubectl -n NAME_SPACE edit deploy DEPLOY_NAME
Cấu hình cho server VM load balancer dùng HAProxy (/etc/haproxy/haproxy.cfg):

Tất cả các yêu cầu API từ các thành phần khác (như kubectl, kubelet, và các controller) đều được gửi đến API Server. Vì vậy, việc có một cách để phân phối tải đều lên các API Server là quan trọng để đảm bảo tính khả dụng và hiệu suất của cụm Kubernetes.
(Thay IP tương ứng)
# LoadBalancer api-server 
frontend k8s-api
   bind 0.0.0.0:16443
   mode tcp
   option tcplog
   default_backend k8s-api

backend k8s-api
   mode tcp
   option tcp-check
   balance roundrobin
   default-server inter 10s downinter 5s rise 2 fall 2 slowstart 60s maxconn 250 maxqueue 256 weight 100
       server master1 192.168.63.1:6443 check
       server master2 192.168.63.2:6443 check

# LoadBalancer nginx ingress
frontend k8s-ingress-http
   bind 0.0.0.0:80
   mode tcp
   option tcplog
   default_backend k8s-ingress-http

backend k8s-ingress-http
   mode tcp
   option tcp-check
   balance roundrobin
   default-server inter 10s downinter 5s rise 2 fall 2 slowstart 60s maxconn 250 maxqueue 256 weight 100
       server worker1 192.168.64.7:4 check
       server worker2 192.168.64.8:5 check
       server worker3 192.168.64.8:6 check

frontend k8s-ingress-https
   bind 0.0.0.0:443
   mode tcp
   option tcplog
   default_backend k8s-ingress-https

backend k8s-ingress-https
   mode tcp
   option tcp-check
   balance roundrobin
   default-server inter 10s downinter 5s rise 2 fall 2 slowstart 60s maxconn 250 maxqueue 256 weight 100
       server worker01 172.31.0.8:443 check
       server worker02 172.31.0.9:443 check
       server worker03 172.31.0.10:443 check

Comments

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *