Kubernetes环境部署Django应用

之前我部署了 Docker环境运行Django 开发环境,现在我们将Docker容器部署到Kubernetes集群,提供更灵活和强健的应用部署。

准备

我部署了 ARM架构Kubernetes 来完成自己的一系列学习和测试,所以在这里部署Django应用,也采用这个ARM集群。

  • 检查集群:

    kubectl get nodes -o wide
    

可以看到我的测试集群有4个节点,其中3个是工作节点:

NAME         STATUS   ROLES    AGE   VERSION   INTERNAL-IP    EXTERNAL-IP   OS-IMAGE             KERNEL-VERSION     CONTAINER-RUNTIME
jetson       Ready    <none>   61d   v1.20.2   192.168.6.10   <none>        Ubuntu 18.04.5 LTS   4.9.140-tegra      docker://19.3.6
pi-master1   Ready    master   68d   v1.20.2   192.168.6.11   <none>        Ubuntu 20.04.2 LTS   5.4.0-1028-raspi   docker://19.3.8
pi-worker1   Ready    <none>   65d   v1.20.2   192.168.6.15   <none>        Ubuntu 20.04.2 LTS   5.4.0-1028-raspi   docker://19.3.8
pi-worker2   Ready    <none>   65d   v1.20.2   192.168.6.16   <none>        Ubuntu 20.04.2 LTS   5.4.0-1028-raspi   docker://19.3.8

部署

  • 给节点添加标签

标签和选择器(labels and selectors) 是调度kubernetes Pod的指引,虽然没有标签也可以部署Pod,但是对于一个复杂的Kubernetes集群,不同的硬件软件组合以及服务器规划,没有一个精心设计的调度指引会导致混乱。例如,混合X86架构和ARM架构,如果错误调度了不正确架构的Pod会导致无法启动。

这里我有3个woker节点: 其中 pi-workerX 节点上添加了 SSD 磁盘,另外一个 jetson 节点有NVIDIA GPU设备。所以添加标签如下:

kubectl label nodes pi-worker1 disktype=ssd
kubectl label nodes pi-worker2 disktype=ssd
kubectl label nodes jetson model=gpu
  • 检查节点:

    kubeclt get nodes --show-labels