在kind运行简单的容器¶
采用 Alpine Docker镜像 来从0开始一步步完成完整的应用服务器运行集群: 将我的 云图 – 云计算图志 WEB网站( Sphinx文档 )部署到 Kubernetes Atlas 模拟 kind(本地docker模拟k8s集群) 集群中,作为 workload resources(工作负载资源) 运行…
准备工作¶
首先结合 kind集群本地Registry 部署一个 kind多节点集群 (快速脚本可以采用 kind集群本地Registry 整合好的脚本
kind-with-registry-arm.sh
):
cd /home/huatai/docs/github.com/cloud-atlas/source/kubernetes/kind/kind_local_registry
./kind-with-registry-arm.sh
采用 Alpine Docker镜像 创建的 NGINX服务 alpine-nginx 镜像:
cd /home/huatai/docs/github.com/cloud-atlas/source/docker/images/alpine_docker_image/alpine-nginx
docker build -t alpine-nginx .
# 推送镜像到kind的local registry
docker tag alpine-nginx localhost:5001/alpine-nginx:20221126-01
docker push localhost:5001/alpine-nginx:20221126-01
运行容器¶
准备一个简单 workload resources(工作负载资源) : 运行2个pod
deployment-simple.yaml
:
apiVersion: apps/v1
kind: Deployment
metadata:
name: alpine-nginx-deployment
spec:
selector:
matchLabels:
app: nginx
replicas: 2 # tells deployment to run 2 pods matching the template
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: localhost:5001/alpine-nginx:20221126-01
ports:
- containerPort: 80
部署采用
kubectl create
:
kubectl create -f deployment-simple.yaml
pod创建问题排查¶
检查:
kubectl get pods -o wide
可以看到:
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx-deployment-c64787574-j5hsl 0/1 CrashLoopBackOff 4 (31s ago) 2m4s 10.244.3.3 dev-worker2 <none> <none>
nginx-deployment-c64787574-n6wvw 0/1 CrashLoopBackOff 4 (27s ago) 2m4s 10.244.5.2 dev-worker4 <none> <none>
启动失败 CrashLoopBackOff
,参考 Kubernetes pod CrashLoopBackOff错误排查
检查pod详情采用
kubectl describe pods
命令:kubectl describe pods nginx-deployment-c64787574-j5hsl
可以看到事件如下:
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 3m45s default-scheduler Successfully assigned default/nginx-deployment-c64787574-j5hsl to dev-worker2
Normal Pulling 3m45s kubelet Pulling image "localhost:5001/alpine-nginx:20221126-01"
Normal Pulled 3m45s kubelet Successfully pulled image "localhost:5001/alpine-nginx:20221126-01" in 138.657406ms
Normal Created 2m13s (x5 over 3m45s) kubelet Created container nginx
Normal Started 2m13s (x5 over 3m45s) kubelet Started container nginx
Normal Pulled 2m13s (x4 over 3m44s) kubelet Container image "localhost:5001/alpine-nginx:20221126-01" already present on machine
Warning BackOff 2m12s (x9 over 3m43s) kubelet Back-off restarting failed container
为何启动容器失败?
需要注意到Kubernetes需要能够正确诊断容器启动状态 Kubernetes健康检测 ,这里检测 liveness
就是通过端口服务完成检测。
但是,很不巧 NGINX服务 alpine-nginx 所使用的 Alpine Linux 发行版提供的 Nginx 软件包,默认采用了一个禁止访问的 default.conf
配置。这个 404
返回页面会使得 Kubernetes健康检测 失败。
检查¶
当 NGINX服务 alpine-nginx 配置正确,能够在 kind(本地docker模拟k8s集群) 集群中运行简单的nginx服务之后,此时检查:
kubectl get pods
就能看到:
NAME READY STATUS RESTARTS AGE
alpine-nginx-deployment-7cb557b55b-6jdj8 1/1 Running 0 32m
alpine-nginx-deployment-7cb557b55b-9zt6q 1/1 Running 0 32m
下一步¶
下面我们来构建:
使用 Btrfs NFS 提供共享存储
配置 在Kubernetes中部署NFS 将共享卷中我的
cloud-atlas
build好的html作为NGINX的目录(配置和上文Docker运行方式类似)