将Go开发的代码部署到k8s集群
一、在服务器上编译go程序
1.1 编译go语言程序
# 安装go
yum install go -y
mkdir /root/test && cd /root/test
# 设置代理
go env -w GOPROXY=https://goproxy.cn,direct # 创建源码文件

[root@master test]# cat main.go
package main
import (
"net/http"
"github.com/gin-gonic/gin"
)
func statusOKHander(c *gin.Context){
c.JSON(http.StatusOK,gin.H{"status":"success~welcome to study"})
} func versionHandler(c *gin.Context){
c.JSON(http.StatusOK,gin.H{"version":"v1.1版本"})
} func main() {
router := gin.new()
router.Use(gin.Recovery())
router.GET("/", statusOKHandler)
router.GET("/version", versionHandler)
router.Run(":8080")
}
main.go代码
# Go mod初始化项目
[root@master test]# go mod init test
go: creating new go.mod: module test
go: to add module requirements and sums:
go mod tidy
[root@master test]# go mod tidy
...
go: downloading gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405
go: downloading golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 # 构建源码
[root@master test]# CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o k8s-demo main.go
[root@master test]# ll
总用量 10784
-rw-r--r-- 1 root root 1288 8月 30 15:17 go.mod
-rw-r--r-- 1 root root 7701 8月 30 15:17 go.sum
-rwxr-xr-x 1 root root 11024637 8月 30 15:27 k8s-demo
-rw-r--r-- 1 root root 464 8月 30 15:27 main.go
1.2 编写dockerfile文件构建镜像
[root@master test]# cat dockerfile
FROM alpine
ADD k8s-demo /data/app/
WORKDIR /data/app/
CMD ["/bin/sh","-c","./k8s-demo"] [root@master test]# docker build -t harbor96.9you.com:6443/tools/k8sdemo:v1 .
[root@master test]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
harbor96.9you.com:6443/tools/k8sdemo v1 4084cba544d7 23 seconds ago 16.6MB # 将镜像上传到harbor,并导入到k8s工作节点
[root@master test]# docker save -o k8sdemo.tar.gz harbor96.9you.com:6443/tools/k8sdemo:v1
# 导入镜像
[root@node1 ~]# ctr -n=k8s.io images import k8sdemo.tar.gz
1.3 创建deployment的yaml文件

[root@master test]# cat 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: 2
template:
metadata:
labels:
app: k8s-demo
spec:
containers:
- name: k8s-demo
image: harbor96.9you.com:6443/tools/k8sdemo:v1
imagePullPolicy: IfNotPresent
ports:
- containerPort: 8080
protocol: TCP
resources:
limits:
cpu: 100m
memory: 200Mi
requests:
cpu: 50m
memory: 100Mi
livenessProbe:
tcpSocket:
port: 8080
initialDelaySeconds: 10
timeoutSeconds: 3
readinessProbe:
httpGet:
path: /
port: 8080
initialDelaySeconds: 10
timeoutSeconds: 2
---
apiVersion: v1
kind: Service
metadata:
name: k8s-demo-svc
namespace: default
labels:
app: k8s-demo
spec:
selector:
app: k8s-demo
ports:
- name: api
port: 8080
protocol: TCP
targetPort: 8080
k8s-demo-deploy-svc.yaml
[root@master test]# kubectl apply -f k8s-demo.yaml
deployment.apps/k8s-demo created
service/k8s-demo-svc created
[root@master test]# kubectl get pods -o wide
\NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
k8s-demo-57b577c5c9-6grz5 1/1 Running 0 2m9s 10.244.104.20 node2 <none> <none>
k8s-demo-57b577c5c9-mc5hb 1/1 Running 0 2m9s 10.244.166.158 node1 <none> <none> [root@master test]# kubectl get svc -n default
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
k8s-demo-svc ClusterIP 10.105.15.228 <none> 8080/TCP 93s # 将svc的TYPE类型从ClusterIP改为nodePort
[root@master test]# kubectl edit svc k8s-demo-svc -n default
type: NodePort # 修改这行
service/k8s-demo-svc edited

[root@master test]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
k8s-demo-svc NodePort 10.105.15.228 <none> 8080:30485/TCP 5m19s # 浏览器访问:
http://192.168.10.10:30485
返回:{"status":"success~welcome to study"} http://192.168.10.10:30485/version
返回:{"version":"v1.1版本"}
将Go开发的代码部署到k8s集群的更多相关文章
- China Azure中部署Kubernetes(K8S)集群
目前China Azure还不支持容器服务(ACS),使用名称"az acs create --orchestrator-type Kubernetes -g zymtest -n kube ...
- Centos7 安装部署Kubernetes(k8s)集群
目录 一.系统环境 二.前言 三.Kubernetes 3.1 概述 3.2 Kubernetes 组件 3.2.1 控制平面组件 3.2.2 Node组件 四.安装部署Kubernetes集群 4. ...
- 基于 Sealos 的镜像构建能力,快速部署自定义 k8s 集群
Sealos 是一个快速构建高可用 k8s 集群的命令行工具,该工具部署时会在第一个 k8s master 节点部署 registry 服务(sealos.hub),该域名通过 hosts 解析到第一 ...
- 用kubeadm+dashboard部署一个k8s集群
kubeadm是官方社区推出的一个用于快速部署kubernetes集群的工具. 这个工具能通过两条指令完成一个kubernetes集群的部署: 1. 安装要求 在开始之前,部署Kubernetes集群 ...
- 5.基于二进制部署kubernetes(k8s)集群
1 kubernetes组件 1.1 Kubernetes 集群图 官网集群架构图 1.2 组件及功能 1.2.1 控制组件(Control Plane Components) 控制组件对集群做出全局 ...
- Centos 7 部署Kubernetes(K8S)集群
资源链接:https://pan.baidu.com/s/1-PT_QQAf7cTu_znX-S-r9Q 密码:33sr 转发:http://blog.51cto.com/lizhenliang/19 ...
- [k8s]jenkins部署在k8s集群
$ cat jenkins-pvc.yaml kind: PersistentVolumeClaim apiVersion: v1 metadata: name: jenkins-pvc spec: ...
- 本地开发spark代码上传spark集群服务并运行
打包 :右击.export.Java .jar File 把TestSpark.jar包上传到spark集群服务器的 spark_home下的myApp下: 提交spark任务: cd /usr/lo ...
- Istio(二):在Kubernetes(k8s)集群上安装部署istio1.14
目录 一.模块概览 二.系统环境 三.安装istio 3.1 使用 Istioctl 安装 3.2 使用 Istio Operator 安装 3.3 生产部署情况如何? 3.4 平台安装指南 四.Ge ...
- kubernetes系列03—kubeadm安装部署K8S集群
本文收录在容器技术学习系列文章总目录 1.kubernetes安装介绍 1.1 K8S架构图 1.2 K8S搭建安装示意图 1.3 安装kubernetes方法 1.3.1 方法1:使用kubeadm ...
随机推荐
- 【已失效】Xcode GUI 添加 SPM 依赖的时候访问不了 github,无视 git config proxy 配置解决方案
此 openradar 中提出者指出了原因:Xcode 调用 libgit2 时传入了 GIT_PROXY_NONE,无视了 git config 中的 proxy 配置.作者说用了自己打的 libg ...
- TCL之基本语法1
TCL之基本语法1 1:set and puts set就是变量声明,这个声明在需要使用的指令下会自动执行,不会出现没有声明的错误.但是对于puts这类定向访问的是不能没有声明的.这里简单理解TCL ...
- Spring Cloud 服务的注册与发现之eureka客户端注册
1.在客户端maven项目中添加eureka客户端依赖 <dependency> <groupId>org.springframework.cloud</groupId& ...
- FPT:又是借鉴Transformer,这次多方向融合特征金字塔 | ECCV 2020
论文提出用于特征金字塔的高效特征交互方法FPT,包含3种精心设计的特征增强操作,分别用于借鉴层内特征进行增强.借鉴高层特征进行增强以及借鉴低层特征进行增强,FPT的输出维度与输入一致,能够自由嵌入到各 ...
- KingbaseES使用kbbench计算连接耗时
前言 本文讨论一下KingbaseES数据库中如何计算数据库连接耗时.有这样一个场景,不借助第三方工具,在数据库服务端计算1000个数据库连接的总耗时,并取得每个连接耗时的平均值.怎样实现呢?我们可以 ...
- FineReport 常用日期公式
获取当前月份最后一天 DATEINMONTH(today(), -1) 获取当前月份第一天 DATEINMONTH(today(), 1) 获取上个月最后一天 DATEINMONTH(MONTHDEL ...
- MybatisPlus的那些坑
1.实体类属性会被错误解析,需要加上注解@TableField @TableField("front_of_id_card") //身份证正面 private String fro ...
- 数据解析之Beautifulsoup
一.BeautifulSoup的简单使用 简单来说,Beautiful Soup是python的一个库,最主要的功能是从网页抓取数据.官方解释如下: Beautiful Soup提供一些简单的.pyt ...
- #对偶图最短路,网络流#洛谷 4001 [ICPC-Beijing 2006]狼抓兔子
题目 网格图最小割\((n,m\leq 1000)\) 分析 首先网络流可以过,但是由于无向图,所以残量网络容量也为\(w\),\(Dinic\)玄学AC,代码就不贴了 那有没有其它方法呢,网格图显然 ...
- #AC自动机#洛谷 2444 [POI2000]病毒
题目 给定若干01串,问是否存在无限长的01串任意子串不是给定的若干串 分析 如果在AC自动机上跳到了访问过的前缀即代表存在一个循环可以无限跳, 在AC自动机上记录哪些状态是不能访问的,在AC自动机上 ...