在 k8s 集群中部署第一个应用

原文地址:https://alphahinex.github.io/2020/10/18/deploy-first-app-in-k8s/

cover

description: "万事开头难"
date: 2020.10.18 10:26
categories:
- Cloud
- DevOps
- K8s
tags: [Cloud, DevOps, Docker, K8s]
keywords: Kubernetes, K8s, Deploy, Deployment, Service, Kuboard


使用 kubeasz 离线安装 k8s 集群 中,我们完成了 k8s 集群的搭建,接下来,可以开始在集群中部署第一个应用了。

目标

在集群中启动一个最简单的 nginx 服务,并能够通过 http 进行访问。

预热

回忆 docker 环境下,要实现这个目标,需要做的事情很简单,一行命令即可:

$ docker run --name some-nginx -d -p 8080:80 nginx

之后便可访问 http://localhost:8080 看到 nginx 的欢迎页面。

也可以使用 docker-compose 配置文件来实现此目标:

some-nginx:
  image: nginx
  ports:
    - "8080:80"

准备

Kubernetes 官方提供了一个 Kompose 工具,可以方便的将 Docker Compose 的配置文件转换成 k8s 所需的形式。让我们来看看官网上的例子:

It’s as simple as 1-2-3

  1. Use an example docker-compose.yaml file or your own
  2. Run kompose up
  3. Check your Kubernetes cluster for your newly deployed containers!
$ wget https://raw.githubusercontent.com/kubernetes/kompose/master/examples/docker-compose-v3.yaml -O docker-compose.yaml

$ kompose up
We are going to create Kubernetes Deployments, Services and PersistentVolumeClaims for your Dockerized application.
If you need different kind of resources, use the 'kompose convert' and 'kubectl create -f' commands instead.

INFO Successfully created Service: redis          
INFO Successfully created Service: web            
INFO Successfully created Deployment: redis       
INFO Successfully created Deployment: web         

Your application has been deployed to Kubernetes. You can run 'kubectl get deployment,svc,pods,pvc' for details.

$ kubectl get po
NAME                            READY     STATUS              RESTARTS   AGE
frontend-591253677-5t038        1/1       Running             0          10s
redis-master-2410703502-9hshf   1/1       Running             0          10s
redis-slave-4049176185-hr1lr    1/1       Running             0          10s

什嘛?这就结束啦?这也太快了啪?

我们还是慢慢来,自己掌握一下节奏吧。

看到 kompose up 下面的提示内容,我们可以通过 kompose convert 命令将 Docker Compose 的文件转换为 k8s 格式的内容:

$ kompose convert -f docker-compose.yml

转换后得到两个 yaml 文件:some-nginx-deployment.yaml 和 some-nginx-service.yaml 。

部署

kompose 将 docker-compose.yml 转换生成了两个 yaml 文件,一个 Deployment 和一个 Service

Deployment 包含了创建一个容器所必须的信息,如镜像、端口、资源需求、副本数等。k8s 会依据 Deployment 中的 template 定义创建必需数量的容器。

Service 用来将 k8s 集群中的服务暴露出来,供外部进行访问。类似在 docker 环境中映射端口至宿主机的操作。k8s 提供了四种 ServiceTypes 来发布服务,但实际在非云提供商大部分的 k8s 环境中,只能选择 NodePort 类型。指定了 nodePort 端口后,k8s 集群中每个节点都会将此端口代理至该 Service,不论这个 Serivce 部署在哪个节点上。Service 通过 selector 与 Deployment 进行关联。

查看 kompose 生成的文件内容,发现里面会包含一些 annotations 信息,以及并没有设定 ServiceType。所以在 kompose 的主页上有这样一段描述:

Transformation of the Docker Compose format to Kubernetes resources manifest may not be exact, but it helps tremendously when first deploying an application on Kubernetes.

可以基于 Docker Compose 文件通过转换工具自动生成基础版本,再基于基础版本进行调整,获得最终使用的版本,可参考如下配置文件 nginx.yml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
  labels:
    app: nginx
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 1
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.17.9
        resources:
          requests:
            cpu: 100m
            memory: 100Mi
        ports:
        - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: nginx
  labels:
    app: nginx
spec:
  type: NodePort
  ports:
  - name: nginx
    port: 80
    nodePort: 30080
  selector:
    app: nginx

将该配置文件应用至集群中:

$ kubectl apply -f nginx.yml

之后,即可通过集群中任意节点的 ip,加配置文件中 nodePort 指定的端口(30080),访问集群中的 nginx 服务。

配置文件参考手册可见 这里

清理

可对配置文件执行 delete 操作清理其中包括的资源,如:

$ kubectl delete -f nginx.yml

可视化界面

使用 k8s 提供的命令行工具,可完成对集群的各项操作。同时也可借助可视化界面,更简便的操作集群,比如: Kuboard

Kuboard 在线演示

Kuboard 提供了 Docker 镜像,可使用官方提供的 kuboard.yaml 方便的将其部署到 k8s 集群中,进行使用。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,189评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,577评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,857评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,703评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,705评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,620评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,995评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,656评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,898评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,639评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,720评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,395评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,982评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,953评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,195评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,907评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,472评论 2 342

推荐阅读更多精彩内容