Kubernetes入门并不总是那么容易。 并非每个人都有部署完整的Kubernetes集群所需的基础架构。 Kubernetes提供用于本地操作的Minikube实用程序。 Minikube是一个非常简单方便的工具,并且有几本有关使用Minikube的培训课程。 但是,关于Minikube,还不能说使用此实用程序可以在几分钟内部署Kubernetes环境。
今天,我想谈谈
MicroK8s软件包,它毫不夸张地说,允许您在几分钟内在本地部署Kubernetes,并开始开发。 甚至不需要预先安装的Docker和Kubernetes,因为 全包。 在本课程中,您将考虑在本地Kubernetes环境中部署Django应用程序。
作为消息来源,我关注了
Mark Gituma的一系列文章,这些文章描述了类似的工作,但仅适用于Minikube,不适用于MicroK8。
但是,在开始工作之前必须满足一个要求。 您必须安装了
Snap ,这又意味着必须安装Linux。
该站点的
手册中介绍了MicroK8的安装。 但是,这只是一行:
sudo snap install microk8s --classic
此外,可能有必要启动环境:
sudo microk8s.start
接下来,您需要激活扩展。 扩展的完整列表可以使用命令
microk8s.enable --help
:仪表板,dns,gpu,入口,istio,metrics-server,注册表,存储。 您可以立即激活除gpu和istio之外的所有内容,因为 它们中的第一个需要预先安装的驱动程序,第二个实质上是升级环境,并且(个人而言,在我的薄弱桌面上)会给系统带来沉重的负担。
microk8s.enable dashboard dns ingress metrics-server registry storage
现在,您可以从扩展列表中得出结论,您将可以访问许多服务,包括仪表板和指标。
创建一个Dockerfile来创建镜像:
FROM python:3-slim LABEL maintainer="mark.gituma@gmail.com" WORKDIR /app COPY requirements.txt . RUN pip install -r requirements.txt RUN django-admin startproject mysite /app EXPOSE 8000 STOPSIGNAL SIGINT ENTRYPOINT ["python", "manage.py"] CMD ["runserver", "0.0.0.0:8000"]
以及具有必要的requirements.txt依赖项的文件:
celery==4.1.0 Django==2.0 kombu==4.1.0
让我们收集图像。 为此,您不需要预安装的Docker,因为 它随附MicroK8:
microk8s.docker build django -t apapacy/tut-django:1.0.0
如果您使用较早安装的docker收集映像,那么仅收集映像并将其发送到本地注册表(这也随MicroK8s一起提供,并且可以在端口32000上运行)可能还不够:
microk8s.docker tag apapacy/tut-django:1.0.0 localhost:32000/apapacy/tut-django:1.0.0 microk8s.docker push localhost:32000/apapacy/tut-django:1.0.0
最有可能的是,不需要此步骤,但是为了完整起见,我指出了这一点,同时也引起您注意,您拥有本地Docker注册表。
Kubernetes的基本构建模块是Pod(Pod),容器在其中工作(通常是一个容器,但可能有多个)。 可以通过多种方式创建豆荚。 但是今天我们对部署(Deployment)感兴趣。 部署描述了用于创建Pod的模板。 部署是使用yml配置文件定义的。 在“部署”配置中,指定Pod副本的数量以及从中收集此Pod及其副本的映像,以及端口(Dockerfile中的Django运行的8000端口-不可思议):
apiVersion: apps/v1beta2 kind: Deployment metadata: name: django labels: app: django spec: replicas: 2 selector: matchLabels: pod: django-container template: metadata: labels: pod: django-container spec: containers: - name: django-web image: localhost:32000/apapacy/tut-django:1.0.0 ports: - containerPort: 8000
这笔押金是在周三由团队加载的:
microk8s.kubectl apply -f config/deployment.yml
并行地,您可以运行一个命令来监视部署期间发生的操作:
watch microk8s.kubectl get all
现在,您将拥有多个无法使用Django应用程序的Pod。 为了使Pod彼此之间以及与外界进行通信,还有另一种抽象-服务。 服务(如部署)由配置文件定义:
kind: Service apiVersion: v1 metadata: name: django-service spec: selector: pod: django-container ports: - protocol: TCP port: 8000 # targetPort: 8001 type: ClusterIP # type: NodePort
pod: django-container
选择器确定服务将为哪个Deployment服务(pod选择器的名称未预定义-这只是必须匹配的标签)。 该服务的加载方式与Deployment类似:
microk8s.kubectl apply -f config/service.yml
下载后,可以通过内部网络地址访问该服务。 如果运行命令
microk8s.kubectl get all
,您可以看到以下地址:
service/django-service ClusterIP 10.152.183.156 none 8000/TCP 3h33m
通过执行curl命令(或通过打开浏览器),我们将获得Django欢迎页面:
curl 10.152.183.156:8000
服务的配置中有两条注释行。 如果您取消注释,则可以通过32000或更高范围内的随机端口从外部网络额外获得该服务。
为了获得该服务的永久地址,可以通过该地址与外部网络进行联系,MicroK8提供了两种选择:1)进入和2)istio。 最简单的方法是使用Ingress。 如果尚未激活,则需要激活入口组件:
microk8s.enable ingress
之后,您可以通过运行命令
microk8s.kubectl get all
来验证此组件是否已安装并且正在运行。 在应用程序和服务列表中应出现一些名称为
default-http-backend
条目。 特别是,应显示在端口80上运行的服务:
service/default-http-backend ClusterIP 10.152.183.42 none 80/TCP 179m
名称default-http-backend是MicroK8s中的预定义名称。 通过此名称,您必须在入口配置中引用此服务。
入口配置类似于Web服务器或代理服务器的配置,它们在系统内部。 因此,主机,路径和端口都存在于其中—熟悉的所有属性:
apiVersion: extensions/v1beta1 kind: Ingress metadata: name: tut-django annotations: nginx.ingress.kubernetes.io/rewrite-target: / spec: backend: serviceName: default-http-backend servicePort: 80 rules: - host: localhost http: paths: - path: /django backend: serviceName: django-service servicePort: 8000
入口配置使用以下命令加载:
microk8s.kubectl apply -f config/ingress.yml
之后,可以在
localhost / django上找到Django欢迎页面。
今天就这些了。
有用的链接:
1.
github.com/apapacy/microk8s-tut2.
medium.com/@markgituma/kubernetes-local-to-production-with-django-2-docker-and-minikube-ba843d858817apapacy@gmail.com
2019年2月10日