本篇主要讲解如何将golang的服务部署到kubernetes集群里,附带相关的golang的demo和yml文件内容。纯新手入门方式,生产服务需要完整的CI/CD流程来支持。

golang服务代码

这里简单写一个k8s-demo的服务,提供两个接口ping和version接口,main.go文件代码如下:

package main

import (
"net/http" "github.com/gin-gonic/gin"
) func statusOKHandler(c *gin.Context) {
c.JSON(http.StatusOK, gin.H{"status": "success"})
} func versionHandler(c *gin.Context) {
c.JSON(http.StatusOK, gin.H{"version": "v1.0"})
} func main() {
router := gin.New()
router.Use(gin.Recovery())
router.GET("/ping", statusOKHandler)
router.GET("/version", versionHandler)
router.Run(":8080")
}

  

构建命令:CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o k8s-demo main.go

Dockerfile文件

这里只提供最基础的demo写法,如果有额外的需求在dockerfile文件内补充就行,Dockerfile文件内容如下:

FROM alpine
ADD k8s-demo /data/app/
WORKDIR /data/app/
CMD ["/bin/bash","-c","./k8s-demo"]

CI构建脚本

写一个build.sh,用于编译二进制文件,然后进行docker镜像打包和推送进行到镜像仓库:

#!/bin/bash

set -e

CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o k8s-demo main.go
docker build -t www.5bug.wang/docker/k8s-demo:1.0 .
docker push www.5bug.wang/docker/k8s-demo:1.0

执行build.sh脚本文件即可,请确保此步骤成功将镜像推送到你的镜像仓库里。

kubernetes部署

准备创建deployment的yaml文件

kubernetes版本1.18,我这里使用yaml文件创建deployment来部署k8s-demo服务到k8s集群里,k8s-demo.yaml文件内容如下:

---
apiVersion: apps/v1
kind: Deployment
metadata:
name: k8s-demo
namespace: default
labels:
app: k8s-demo
spec:
selector:
matchLabels:
app: k8s-demo
replicas: 4
revisionHistoryLimit: 10
minReadySeconds: 5
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 1
maxUnavailable: 1
template:
metadata:
labels:
app: k8s-demo
spec:
containers:
- image: www.5bug.wang/docker/k8s-demo:1.0
imagePullPolicy: IfNotPresent
name: k8s-demo
ports:
- containerPort: 8080
protocol: TCP
resources:
limits:
cpu: 100m
memory: 100Mi
requests:
cpu: 50m
memory: 50Mi
livenessProbe:
tcpSocket:
port: 8080
initialDelaySeconds: 10
timeoutSeconds: 3
readinessProbe:
httpGet:
path: /ping
port: 8080
initialDelaySeconds: 10
timeoutSeconds: 2 ---
apiVersion: v1
kind: Service
metadata:
name: k8s-demo-svc
namespace: default
labels:
app: k8s-demo
spec:
ports:
- name: api
port: 8080
protocol: TCP
targetPort: 8080
selector:
app: k8s-demo ---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: k8s-demo-ingress
namespace: default
spec:
rules:
- host: k8s-demo.local
http:
paths:
- path: /
backend:
serviceName: k8s-demo-svc
servicePort: api

 

此yaml文件里主要定义了三种资源:deployment、service、ingress,都配置在默认的namespace里,yaml文件里的每项内容做什么用的下一篇再补充,这里先把服务部署起来找找成就感!

k8s部署

在已经搭建好k8s环境的master节点里使用kubectl命令来执行部署,命令如下:

kubectl apply -f k8s-demo.yaml

执行效果如下:

稍等会通过通过查询pods列表的命令:kubectl get pods 来查看pod运行状态,如下图:

配置外部访问

k8s的服务支持外部访问的方式有好几种,我这里我采用了ingress的方式,由于是本地使用,所以这里需要绑下host文件,通过查询ingress的命令查询ingress列表可以得知host绑什么IP地址,如下::

5bug.wang-MacBook:~/codes/projects/k8s-demo$ kubectl get ingress
NAME               CLASS    HOSTS            ADDRESS          PORTS   AGE
k8s-demo-ingress   <none>   k8s-demo.local   192.168.99.103   80      7m26s

修改/etc/hosts文件,增加:192.168.99.103  k8s-demo.local即可。

浏览器里访问:http://k8s-demo.local/ping即可看到ping接口的返回值了,到这里k8s-demo成功部署到k8s集群里了。

吾八哥学k8s(二):golang服务部署到kubernetes的更多相关文章

  1. 吾八哥学Selenium(二):操作输入框/按钮的方法

    一个web页面一定少不了输入框或者按钮这两种元素,那么在Python里如何使用Selenium操作web页面里的输入框和按钮呢?本文带你简单入门. 本文采用了一个例子,就是利用Selenium打开百度 ...

  2. 吾八哥学Python(二):Python代码编辑器的选用

    Python开发环境配置好了,但发现自带的代码编辑器貌似用着有点不大习惯啊,所以咱们就找一个"好用的"代码编辑器吧,网上搜了一下资料,Python常用的编辑器有如下一些: 1. S ...

  3. 吾八哥学Selenium(四):操作下拉框select标签的方法

    我们在做web页面自动化测试的时候会经常遇到<select></select>标签的下拉框,那么在Python里如何实现去操作这种控件呢?今天就给大家分享一下这个玩法.为了让大 ...

  4. 吾八哥学Python(六):运算符与表达式

    上篇简单学习了数学运算符,今天来学习下完整的Python运算符与表达式,具体看下面的表格吧! 表1 运算符与它们的用法 运算符 名称 说明 例子 + 加 两个对象相加 3 + 5得到8.’a’ + ‘ ...

  5. 吾八哥学Python(五):Python基本数学运算

    今天我们学习Python里的基本数学运算方法,还是通过例子来练习吧! 加减乘除求余 #加法 print(12+34) #减法 print(30-10.0) #乘法 print(3*5) #除法 pri ...

  6. 吾八哥学Python(三):了解Python基础语法(上)

    学习一门开发语言首先当然是要熟悉它的语法了,Python的语法还算是比较简单的,这里从基础的开始了解一下. 标识符1.第一个字符必须是字母表中字母或下划线'_'.2.标识符的其他的部分有字母.数字和下 ...

  7. 吾八哥学Selenium(三):操作复选框checkbox/单选框radio的方法

    复选框checkbox和单选框radio是web网站里经常会使用到的两个控件,那么在web自动化测试的时候如何利用Selenium来操作这俩控件呢?今天我们就来简单入门练习一下! html测试页面代码 ...

  8. 吾八哥学Python(四):了解Python基础语法(下)

    咱们接着上篇的语法学习,继续了解学习Python基础语法. 数据类型大体上把Python中的数据类型分为如下几类:Number(数字),String(字符串).List(列表).Dictionary( ...

  9. 吾八哥学Python(一):搭建Python开发环境(Windows)

    学习Python的第一步当然是要配置一下开发环境了,这里记录一下本人在windows 10(64位)下配置Python开发环境的过程,供跟我一样的新手参考一下. 一.下载Python安装包 目前最新的 ...

随机推荐

  1. hbase 面试问题汇总

    一.Hbase的六大特点: (1).表大:一个表可以有数亿行,上百万列. (2).无模式:每行都有一个可排序的主键和任意多的列,列可以根据需要动态增加,同一个表中的不同行的可以有截然不同的列. (3) ...

  2. Centos7配置IP地址和DNS

    目录 一.查看IP地址 1.ifconfig命令 2.ip addr命令 二.配置网卡 1.动态IP地址 2.静态IP地址 3.重启网卡 三.注意事项 四.本地虚拟机设置静态IP后不能上网的解决方法 ...

  3. 启动/关闭oracle服务

    写一个脚本就可以很方便的打开服务和关闭服务,但是记住要以管理员的身份运行哦! 首先建立两个文件:启动.txt 和关闭.txt [在下面代码里启动的服务名称可能版本不一样,有可能名字不一样,自己对照看看 ...

  4. 洛谷1074 靶状数独dfs 排序、记录、搜索

    题目网址:https://www.luogu.com.cn/problem/P1074 大意就是在一个9*9的数独中填数,要求行列宫都是九个互不相同的数字,给定一定的得分机制,要求求解最大得分.思路大 ...

  5. 微信小程序分享转发用法大全——自定义分享、全局分享、组合分享

    官方提供的自定义分享 使用隐式页面配置函数实现的全局分享-推荐 使用隐式路由实现的全局分享-不推荐,仅供了解隐式路由 前言: 目前微信小程序只开放了页面自定义分享的API,为了能够更灵活的进行分享配置 ...

  6. 推荐系统(Recommender Systems)

    本博客是针对Andrew Ng在Coursera上的machine learning课程的学习笔记. 目录 基于内容的推荐(Content-based recommendation) 问题表述 问题范 ...

  7. Redis学习笔记2-redis管道(pipeline)

    redis的管道(Pipelining)操作是一种异步的访问模式,一次发送多个指令,不同步等待其返回结果.这样可以取得非常好的执行效率.这就是管道,调用方法如下: 来源:http://blog.csd ...

  8. Flume数据采集结合etcd作为配置中心在爬虫数据采集处理中的架构实践。

    Apache Flume是一个分布式的.可靠的.可用的系统,用于有效地收集. 聚合和将大量日志数据从许多不同的源移动到一个集中的数据存储,但是其本身是以本地properties作为配置的,配置无法做到 ...

  9. NatApp 外网映射工具

    外网映射工具 在做微信开发或者是对接第三方支付接口时,回调接口可能需要外网访问,这时候开发者在本地测试的时候,需要用到外网测试工具.常用的外网测试工具有natapp.ngrok NatApp简介服务器 ...

  10. 服务器部署Jupyter Notebook

    先安装jupyter notebook pip install ipython pip install jupyter 创建一个目录(jupyter notebook工作目录) mkdir jupyt ...