高可用Kubernetes集群搭建完成后,最好先进行一遍简单测试,确认它已经正常运行起来了。

  1. 部署测试用的pod和service
kubectl create deployment hello-server --image=gcr.io/google-samples/hello-app:1.0
kubectl expose deployment hello-server --type LoadBalancer --port 80 --target-port 8080

2. 扩展deployment数量

kubectl scale --replicas=3 deployment hello-server

3. 执行kubectl get svc 命令,得到service的IP地址,运行

for i in {1..5}; do curl http://192.168.234.81; done

其中192.168.234.81是service IP,根据实际情况调整

运行结果应该和下面类似

Hello, world!
Version: 1.0.0
Hostname: hello-server-5f8d66645-qfs5q
Hello, world!
Version: 1.0.0
Hostname: hello-server-5f8d66645-qfs5q
Hello, world!
Version: 1.0.0
Hostname: hello-server-5f8d66645-8hzx5
Hello, world!
Version: 1.0.0
Hostname: hello-server-5f8d66645-ztwrv
Hello, world!
Version: 1.0.0
Hostname: hello-server-5f8d66645-qfs5q

可以看到Hostname不断在三个节点之间来回切换,可见负载均衡service已经把HTTP请求分散到了三个pod上面。

4. 安装HTTPS证书

前提是需要先完成网站域名的注册,假定使用duckdns免费域名,域名为hs3333.duckdns.org。

先安装acme.sh

curl https://get.acme.sh | sh -s email=youremail@email.com
alias acme.sh=~/.acme.sh/acme.sh

接下来申请证书,其中的dockdns token可以从duckdns网站上获取得到

export DuckDNS_Token="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

acme.sh --issue --dns dns_duckdns -d hs3333.duckdns.org 

5. 生成证书的TLS密钥

kubectl create secret tls helloservercert --key /root/.acme.sh/hs3333.duckdns.org_ecc/hs3333.duckdns.org.key --cert /root/.acme.sh/hs3333.duckdns.org_ecc/hs3333.duckdns.org.cer

6. 部署ingress

把下列内容保存到文件hsingress.yaml

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: hsingress
  namespace: default
spec:
  ingressClassName: nginx
  tls:
  - hosts:
    - hs3333.duckdns.org
    secretName: helloservercert
  rules:
  - host: hs3333.duckdns.org
    http:
      paths:
      - backend:
          service:
            name: hello-server
            port:
              number: 80
        path: /
        pathType: Prefix

执行kubectl apply -f hsingress.yaml生效

然后执行kubectl get ingress ,可以看到hsingress的ip地址,进入duckdns,把hs3333.dockdns.org的域名修改为该ip地址。

7. 现在可以用浏览器访问https://hs3333.duckdns.org,确认ingress运行正常了。

刷新浏览器,可以看到Hostname在不断变化,说明ingress已经把负载分配到了多个worker节点。

8.接下来,简单测试高可用性。

把master和worker主机各关闭一台。

用kubectl get node命令,看到类似如下输出

NAME STATUS ROLES AGE VERSION
master1 Ready control-plane 3h4m v1.28.4
master2 NotReady control-plane 3h1m v1.28.4
master3 Ready control-plane 178m v1.28.4
worker1 Ready 175m v1.28.4
worker2 NotReady 169m v1.28.4
worker3 Ready 166m v1.28.4

可以看到,有一台master和一台worker节点已经下线了。

运行

for i in {1..5}; do curl http://192.168.234.81; done

可以发现,HTTP请求返回正常,但Hostname少了一个。

再用浏览器访问https://hs3333.duckdns.org,可以看到响应正常,多次刷新,可以看到Hostname也少了一个。

9. 恢复master和worker节点的运行状态,测试结束。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注