本篇主要讲解如何将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. Linux下反弹shell笔记

    0x00 NC命令详解 在介绍如何反弹shell之前,先了解相关知识要点. nc全称为netcat,所做的就是在两台电脑之间建立链接,并返回两个数据流 可运行在TCP或者UDP模式,添加参数 —u 则 ...

  2. 第十周Java实验作业

    实验十  泛型程序设计技术 实验时间 2018-11-1 1.实验目的与要求 (1) 理解泛型概念: 泛型:也称参数化类型,就是在定义类,接口和方法时,通过类型参数只是将要处理的类型对象.(如Arra ...

  3. Python_matplotlib画图时图例说明(legend)放到图像外侧

    https://blog.csdn.net/Poul_henry/article/details/82533569 import matplotlib.pyplot as plt import num ...

  4. swift 网络请求中含有特殊字符的解决方案

    在网络请求时,URL出现中文或特殊字符时会造成请求失败,通常可使用  addingPercentEncoding(withAllowedCharacters: CharacterSet) 方法进行解决 ...

  5. HDU - 1317 ~ SPFA正权回路的判断

    题意:有最多一百个房间,房间之间连通,到达另一个房间会消耗能量值或者增加能量值,求是否能从一号房间到达n号房间. 看数据,有定5个房间,下面有5行,第 iii 行代表 iii 号 房间的信息,第一个数 ...

  6. 维护你的请求队列,处理token异常

    前言 网络请求是开发中最基础也是最核心的需求,封装一个稳定且可用性高的请求也显得尤为重要.通常封装的内容除了入参之外,更多的是请求中的异常处理.本文分享下我在处理 token 异常方面的做法,通过维护 ...

  7. lvs + keepalived + gninx 高性能负载均衡

    1,nginx 作为负载均衡器,在应用层实现了负载均衡和反向代理,在分布式集群中,能够有效的去处理大数据量,高访问的应用.但是,如果nginx 服务挂了怎么办? 为此,可以实现两台nginx或者多台n ...

  8. What is MongoDB and For What?

    1.MongoDB是什么? MongoDB是一款为web应用程序和互联网基础设施设计的数据库管理系统.没错MongoDB就是数据库,是NoSQL类型的数据库 2.为什么要用MongoDB? (1)Mo ...

  9. 2020.4.4号全国疫情哀悼日网页变灰色前端是如何实现的?-pink老师

    今天是4.4疫情哀悼日,纪念疫情期间牺牲的烈士和逝世同胞,因此大部分网站颜色都变灰色了,我们前端是如何实现的呢? 核心原理,使用css3的滤镜效果即可,filter grayscale 将整个界面变为 ...

  10. NKOJ 【NOIP2015 Day2】运输计划

    时间限制 : 20000 MS   空间限制 : 262144 KB 评测说明 : 2s,256m 问题描述 公元 2044 年,人类进入了宇宙纪元. L 国有 n 个星球,还有 n−1 条双向航道, ...