使用MicroK8在几分钟内在桌面上部署Kubernetes

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-tut
2. medium.com/@markgituma/kubernetes-local-to-production-with-django-2-docker-and-minikube-ba843d858817

apapacy@gmail.com
2019年2月10日

Source: https://habr.com/ru/post/zh-CN439734/


All Articles