Kubernetes实战

Stella981
• 阅读 820

使用kind构建一个单层架构Node/Express网络应用程序

Kubernetes实战-从零开始搭建微服务 1

Kubernetes实战

前言

准备写一个Kubernetes实战系列教程,毕竟cnblogs作为国内最早的技术博客现在都已经开始迁移到Kubernetes了,此处要有掌声给博客园。系列会更加偏向于实战,对于理论只在需要时讲解。

Docker hub 上我个人觉着有两个做奇葩的镜像image

  1. dind, docker in docker
  2. kind, kubernetes in docker / k8s in docker

很多人对k8s的学习都是从minikube开始,但是,但是,但是,当你亲身对比kind和minikube的时候,会发现kind至少速度快三倍(在我这台mac老本上)。

1 准备

需要提前安装好

  • docker
  • kubernetes-cli

安装kind

2 创建第一个cluster

需要大概2~3分钟, kind create cluster
Kubernetes实战

会创建一个cluster 名字为kind-kind

kubectl cluster-info 了解下cluster 状况

Kubernetes master is running at https://127.0.0.1:51842
KubeDNS is running at https://127.0.0.1:51842/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy

To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.

其中的链接即使你的k8s control plane

如果再运行docker ps, 至少会有一个kind-control-plane 的container 在运行。

可以再试试以下命令:

  • kind get clusters 获取所有cluster
  • kubectl config get-contexts
  • kubectl get nodes -o wide
  • kubectl get svc

截止目前,一个单节点的k8s集群就在本地的docker环境里搭建好了。👌

3 发布一个node/express app

创建以下文件,并保存。

Dcoker and App

  • inde.js

    const express = require('express') const app = express() const port = 3000

    app.get('/', (req, res) => res.send('Hello World! running on kubernetes'))

    app.listen(port, () => console.log(Example app listening at http://localhost:${port}))

package.json, package-lock.json 整个项目文件,请访问github repo

  • Dockerfile

    FROM node:14.2.0-alpine EXPOSE 3000 WORKDIR /anode

    ADD package.json . ADD package-lock.json .

    RUN npm ci ADD . .

    CMD ["node", "index.js"]

上传镜像到docker hub (可选)

克隆所有需要的代码和配置文件。 在push镜像之前,不要忘了docker login

docker build -t {yout dockerhub name}/a-node:v1 .
docker push  {yout dockerhub name}/a-node:v1

deployment, service 配置

  • deployment.yaml

    apiVersion: apps/v1 kind: Deployment metadata: name: a-node-deployment labels: app: node spec: replicas: 1 selector: matchLabels: app: a-node template: metadata: labels: app: a-node spec: containers: - name: a-node-container image: tim010/a-node:v1 # or your own image ports: - containerPort: 3000

  • service.yaml

    apiVersion: v1 kind: Service metadata: name: a-node-service spec: ports: - targetPort: 3000 protocol: TCP port: 80 selector: app: a-node-service type: NodePort

发布

kubectl apply -f deployment.yaml

deployment.apps/a-node-deployment created

kubectl apply -f service.yaml

service/a-node-service created

为了确保发布成功,运行

kubectl get pods

应该会输出如图的结果,不要忘了复制你的pod名。
Kubernetes实战

kubectl get service



NAME             TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)        AGE
a-node-service   NodePort    10.111.52.71   <none>        80:32709/TCP   7h25m
kubernetes          ClusterIP     10.96.0.1       <none>         443/TCP            8h

等等,即使发布成功了,我的app在哪呢?

  • http://10.111.52.71:3000? localhost:3000
  • no

你需要端口转发

kubectl port-forward {your port name for deployment 你的pod名} 3000:3000

Kubernetes实战

取消发布 teardown

kubectl delete -f deployment.yml
kubectl delete -f service.yml

停掉整个cluster

kind delete cluster

结束语

至此,你的本地k8s 集群生命终结。

动手去做永远都会比只学习理论要快得多,希望这第一个教程可以让大家都快速上手,不被K8s复杂的概念吓到。系列后续会写一些更多关于Kubernetes 高可用性 和架构的。

Tips 小提示

源码,参考和推荐

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Stella981 Stella981
2年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Easter79 Easter79
2年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Wesley13 Wesley13
2年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
2年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
2年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
3个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这