首页 > 其他分享 >使用deployment管理简单的服务器

使用deployment管理简单的服务器

时间:2024-11-21 11:45:30浏览次数:3  
标签:19 deployment 192.168 49.2 简单 test 服务器 curl

承接上文

使用k8s搭建一个简单的golang服务器

使用deployment管理起来

直接创建deployment来创建pod,顺便测试一下故障场景,修改一下test.go来增加退出场景,需要重新制作镜像,参考上面即可。

package main

import (
    "fmt"
    "net/http"
    "os"
)

func main() {
    fmt.Println("start main")
    http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
        fmt.Fprintf(w, "hello, world")
    })
    // 添加一个退出的url,测试服务异常
    http.HandleFunc("/exit", func(w http.ResponseWriter, r *http.Request) {
        fmt.Println("recieve exit, bye!")
        os.Exit(0)
    })
    err := http.ListenAndServe(":7878", nil)
    if err != nil {
        panic(err)
    }
    os.Exit(0)
}

重新制作镜像搞到minikube里面之后,我们开始定义deployment来管理pod

apiVersion: apps/v1		# 版本,虽然不知道为什么,但是要写apps/v1
kind: Deployment		# 选deployment
metadata:
  name: test-dep		# 给deployment定义名字,创建的pod会以此为前缀
  # labels:				# 给deployment定义标签,也可以不定义,暂时没用
  	# app: test
spec:					# deployment的要求
  replicas: 1			# pods启动1个,保持1个
  selector:				# 定义deployment管理的pod选择器
    matchLabels:		# 要跟下面的template中一样,不一样会报错
      app: test
  template:				# 定义deployment管理的pod
    metadata:
      labels:			# 定义标签,要和deployment中一样
        app: test
    spec:				# pod的定义
      containers:
        - name: test
          image: test-con:latest
          imagePullPolicy: Never
          command: ["go"]
          args: ["run", "/root/test.go"]

然后就是启动一下deployment

kubectl apply -f test.yaml

查看deployment和pod的状态

=> kubectl get deployments
NAME       READY   UP-TO-DATE   AVAILABLE   AGE
test-dep   1/1     1            1           4m6s
=> kubectl get pods
NAME                        READY   STATUS    RESTARTS   AGE
test-dep-769f4564f5-56zv6   1/1     Running   0          4m10s

在Running状态后,service那边不用动,同样用上面的方式访问,可以通。

=> minikube ip
192.168.49.2
=> curl 192.168.49.2:30449
hello, world%

然后测试一下搞挂这个服务端,自己会恢复

=> curl 192.168.49.2:30449/exit; date; while true; do curl 192.168.49.2:30449 &>/dev/null; if [ $? -eq 0 ]; then break; fi; sleep 1; done; date
curl: (52) Empty reply from server
2024年 11月 19日 星期二 20:06:46 CST
2024年 11月 19日 星期二 20:07:29 CST

pods的状态也是有一次重启

=> kubectl get pods
NAME                        READY   STATUS    RESTARTS       AGE
test-dep-769f4564f5-56zv6   1/1     Running   1 (119s ago)   42m

测试一下pods的容错,我们把deployments配置改一下,把replicas改成3个。等待启动完成再次测试。

=> kubectl apply -f test.yaml --force
# 搞挂第一个,第二个可以响应,很快返回
=> curl 192.168.49.2:30449/exit; date; while true; do curl 192.168.49.2:30449 &>/dev/null; if [ $? -eq 0 ]; then break; fi; sleep 1; done; date
curl: (52) Empty reply from server
2024年 11月 19日 星期二 20:17:15 CST
2024年 11月 19日 星期二 20:17:15 CST
# 搞挂第二个,第三个可以响应,很快返回
=> curl 192.168.49.2:30449/exit; date; while true; do curl 192.168.49.2:30449 &>/dev/null; if [ $? -eq 0 ]; then break; fi; sleep 1; done; date
curl: (52) Empty reply from server
2024年 11月 19日 星期二 20:17:16 CST
2024年 11月 19日 星期二 20:17:17 CST
# 搞挂第三个,第一个重启还没搞定,等第一个重启好就可以了
=> curl 192.168.49.2:30449/exit; date; while true; do curl 192.168.49.2:30449 &>/dev/null; if [ $? -eq 0 ]; then break; fi; sleep 1; done; date
curl: (52) Empty reply from server
2024年 11月 19日 星期二 20:17:19 CST
2024年 11月 19日 星期二 20:18:06 CST

由于我写的是go run test.go 容器启动之后需要现场编译,所以会慢一点,编译好的二进制启动会更快,应该就都是快速返回了。可以看到service里面暴露的端口会自动负载均衡到三个pods上面。

标签:19,deployment,192.168,49.2,简单,test,服务器,curl
From: https://blog.csdn.net/qq_26124425/article/details/143912377

相关文章

  • 使用minikube快速搭建一个简单的golang微服务访问
    先在宿主机的docker下载一下golang的最新镜像dockerpullgolang:test写个简单的服务器,监听7878端口,请求都返回hello,worldpackagemainimport("fmt""net/http""os")funcmain(){fmt.Println("startmain")http.HandleFunc(&q......
  • 简单线性回归
    简单线性回归虽然简单线性回归对于现实世界的问题几乎不具有可用性,但是理解简单线性回归是理解许多其他模型的关键。简单线性回归(一元)假设你希望了解披萨的价格。你可能会简单地查看菜单。但是这里,我们将基于能观测到的披萨的属性或者说解释变量,来预测披萨的价格。让我们来对披......
  • Linux服务器感染病毒,如何处理?
    1导语最近在做性能测试时,发现一台服务器的性能很差,一排查才发现原来是中了挖矿病毒,通常来说,服务器中病毒后,最快速的处理方式就是重装系统,但对于运行着重要业务的系统来说,重装系统较为麻烦。本文主要介绍Linux服务器上挖矿病毒的排查和查杀过程。2病毒排查通常来说挖矿病......
  • 使用 Nimrod实现简单图像识别
    在本篇文章中,我们将使用Nimrod编程语言编写一个基础图像识别程序。该程序将检测图片中的主要色调分布,并标识出是否包含特定颜色,如红色。我们使用这门有趣且鲜为人知的语言,来感受它的简洁和强大。安装与准备工作Nimrod(现称Nim)可以通过以下步骤安装:访问Nim官方网站下载最新......
  • 一个.NET开源、快速、功能丰富的跨平台阅读服务器
    前言今天大姚给大家分享一个基于.NET开源的快速、功能丰富的跨平台阅读服务器,它的设计初衷是提供一个全面的解决方案,满足用户的所有阅读需求。用户可以设置自己的服务器,并与朋友和家人分享阅读收藏:Kavita。支持格式书籍:epub,pdf。漫画/网络漫画/漫画书:cbr,cbz,zip,rar,r......
  • 简单的在数组的特定位置插入数字
    特别简单啊就是要判断好循环次数,实在判断不出来就一个一个数呗然后就是要想到比较完大小,接着输出应该往后延续一个,不然就重叠了#include<stdio.h>intmain(){inta[10];//先定义数组数组有9个元素inti,num,j;//定义各种变量备用//读取数组,其实我......
  • 快速简单的视频下载器——lux
    文章目录前言1.环境检查1.1检查lux安装1.2检查FFmpeg安装1.3备注2.lux指令2.1无OPTIONS2.2-i指令2.3-f指令2.4-c指令2.5-o指令2.6备注3.结语前言在学习之余,发现了一个简单并且高效的视频下载器lux,能够帮你快速且高效的下载文件(不仅仅是视频可以),......
  • 香港服务器套餐多样性正解看过来呢?
    首先什么是香港服务器香港服务器就是机房在香港地区,由在香港的机房管理的服务器。实际上香港服务器和内地服务器本身没有什么区别,香港服务器非常适合那些用户群体在香港或者亚太地区的,现如今发展非常的快,香港带宽很多商家也有足够的资源。香港机房国际出口带宽更是非常充足,香港......
  • Nginx服务器配置---反向代理服务时proxy_pass的转发规则
    nginx是由俄罗斯开发的一款httpweb服务器,我们经常用这款服务器做负载均衡和反向代理。今天我们就来聊聊Nginx作为反向代理时,如何进行路由配置。假设你已经部署好Nginx了,我们进入Nginx安装目录,进入nginx.conf文件。找到http节点下的server节点,值是一个json。在json中有一个locat......
  • 无法从我的应用程序连接到位于本地主机8000的FAST API服务器,该应用程序在停靠容器下运
    无法从我的应用程序连接到位于本地主机8000的FASTAPI服务器,该应用程序在停靠容器下运行问题:无法从我的应用程序连接到位于本地主机8000的FASTAPI服务器解决步骤:1.首先,确保你的本地电脑上已经安装了Docker。如果没有安装,可以前往Docker官网下载并安装。2.安装完成后,你需......