
高可用Kubernetes集群搭建完成后,最好先进行一遍简单测试,确认它已经正常运行起来了。
- 部署测试用的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节点的运行状态,测试结束。