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
Để lại một bình luận