当前位置:首页 > 每日看点 > 正文内容

你是怎么使用K8s的?

卡卷网1年前 (2024-12-17)每日看点187

从简单的golang服务器一步一步组成一个k8s的高可用的应用

kubernetes学习记录

本地目录实现持久化存储

容器是无状态的,每次重启都是新的进程,但是我们需要将一些状态数据如配置、用户数据等存到本地来方便新的容器可以拿到历史状态。先创建一个目录来存放数据,并且挂载到minikube虚拟机内(不是pod里面)。注意要新开一个终端来调用,这个命令会阻塞,不能中断。

=> mkdir storage => minikube mount storage:/data

可以测试一下是否成功了

=> echo aaa > storage/test.txt => minikube ssh 'cat /data/test.txt' aaa

然后创建一个持久化存储卷(PersistentVolume)的配置,挂载本机目录,注意是minikube虚拟机的目录,所以是/data

apiVersion: v1 # 版本信息 kind: PersistentVolume # 这个是一个持久化存储卷 metadata: name: test-local-pv # 元数据定义名称 spec: capacity: storage: 1Ki # 定义容量1KB,定义不定义都一样,因为目录挂载的方式取决于原始目录的容量 storageClassName: local # 定义这个为了和pvc匹配,否则会绑定不了 persistentVolumeReclaimPolicy: Retain # pvc被删除时,pv的回收策略,retain为保留pv,手动清理 accessModes: - ReadWriteMany # 表示该卷可以被多个节点以读写的方式挂载。这意味着多个 Pod 可以同时访问这个卷并进行读写操作。 hostPath: path: /data

pv是不能直接给pod访问和挂载使用的,需要使用pvc才能给到pod使用,所以写一个pvc的配置

apiVersion: v1 # 版本 kind: PersistentVolumeClaim # pvc类型,请求持久化存储卷 metadata: name: test-local-pvc spec: accessModes: - ReadWriteMany # 这个模式表示多个节点可以同时读写这个存储。 resources: requests: storage: 1Ki # 要和pv匹配,不然会无法绑定 volumeName: test-local-pv # 指定要绑定的pv的名字 storageClassName: local # 同样要和pv一致

启动pv和pvc,要看一下是否启动和绑定成功

kubectl apply -f test-pv.yaml kubectl apply -f test-pvc.yaml

pv和pvc的绑定关系使用describe看起来会更清晰一点

kubectl describe pv test-local-pv kubectl describe pvc test-local-pvc

你是怎么使用K8s的?  第1张

你是怎么使用K8s的?  第2张

可以看到pv和pvc绑定成功

下面要修改一下test.go,让我们的服务端可以读取和写入存储的一个文件

package main import ( "fmt" "io/ioutil" "net/http" "os" ) func main() { fmt.Println("start main") hostName := os.Getenv("HOSTNAME") // 正常请求根目录读取这个文件返回内容 http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { contentBytes, err := ioutil.ReadFile("/data/test.txt") outStr := "" if err != nil { outStr = err.Error() } else { outStr = string(contentBytes) } fmt.Fprintf(w, "hello, world, %s, txt: '%s'\n", hostName, outStr) }) // 保存文件,取xxx:xxx/save?content=xxx来存入 http.HandleFunc("/save", func(w http.ResponseWriter, r *http.Request) { r.ParseForm() tmp := r.Form["content"] inputText := "" if len(tmp) > 0 { inputText = tmp[0] } ioutil.WriteFile("/data/test.txt", []byte(inputText), 0644) fmt.Fprintf(w, "%s", inputText) }) 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使用pvc作为存储

apiVersion: apps/v1 # 版本,虽然不知道为什么,但是要写apps/v1 kind: Deployment # 选deployment metadata: name: test-dep # 给deployment定义名字,创建的pod会以此为前缀 spec: # deployment的要求 strategy: type: RollingUpdate # 策略为滚动更新 rollingUpdate: maxUnavailable: 1 # 最多只能停止1个pod maxSurge: 1 # 在更新过程中,最多可以多创建多少个 Pod,本身停止了1个,创建1个,这里设置1会停1个创建2个 replicas: 3 # pods启动3个 selector: # 定义deployment管理的pod选择器 matchLabels: # 要跟下面的template中一样,不一样会报错 app: test template: # 定义deployment管理的pod metadata: labels: # 定义标签,要和deployment中一样 app: test spec: # pod的定义 volumes: # 定义要求的存储卷 - name: test-volume # 起个名字给pod使用 persistentVolumeClaim: # 对应的pvc claimName: test-local-pvc containers: - name: test image: test-con:latest imagePullPolicy: Never # 使用本地镜像,不从远端拉取 command: ["go"] args: ["run", "/root/test.go"] volumeMounts: # 挂载到当前容器 - mountPath: /data # 挂载目录 name: test-volume # 使用的volumes,是上面定义的名字 readinessProbe: # 就绪探针,什么时候可以开始接收流量,不会重启pod httpGet: path: / port: 7878 timeoutSeconds: 1 # 探测超时时间5s initialDelaySeconds: 5 # 第一次探测的等待时间 periodSeconds: 5 # 探测周期 livenessProbe: # 存活探针,什么时候需要杀掉这个pod,如果启动一直失败就会杀掉pod重启一个 httpGet: path: / port: 7878 timeoutSeconds: 1 # 探测超时时间5s initialDelaySeconds: 20 # 第一次探测的等待时间 periodSeconds: 5 # 探测周期 failureThreshold: 10 # 错误阈值,超过这个阈值将会重启pod

生效一下这个配置文件,查看pod的pvc使用情况

kubectl apply -f test-dep.yaml

查看pvc里面更能看出来挂载情况

kubectl describe pvc test-local-pvc

你是怎么使用K8s的?  第3张

扫描二维码推送至手机访问。

版权声明:本文由卡卷网发布,如需转载请注明出处。

本文链接:https://www.kajuan.net/ttnews/2024/12/4780.html

分享给朋友:

相关文章

请问什么软件支持看电视直播?

请问什么软件支持看电视直播?

2024年9月6日最新更新:本文列举的所有看电视直播、或流媒体影视资源点播的软件,我这两天又重新梳理成最新版本,最大程度保证可用性。获取方式见文末图片,或见评论。后续我也将持续更新,文章是旧的软件也会是新的,保证你拿到的都是最新可用版本。作...

大量刷短视频,会让大脑变笨拙吗?

会。我曾经是一名高三学生,亲身实践过。当时集中突破语文,每天都在刷语文卷。然后有一天想躺一下刷手机,结果短视频刷完了,我再去看哪些文章,只觉头晕眼花,难以理解文字。不过好在这种情况是短时间的,过了一天我的能力又恢复了。在我看来,长期刷短视频...

马云也搞不明白:为什么现在用户偏爱微信支付,而不是支付宝?

这题我会,我教马云一招。你直接把你那破比支付宝的代码全删了,重新写一个。打开支付宝直接就是一个大大的支付码,然后右上角按一下就是扫一扫。你要是还想保留你的其他那些乱七八糟的功能,麻烦将他们全部做到下拉菜单里。你这么设计我不说你能干死微信,但...

想入个键盘,想买机械的但是太贵,求知友推荐一款手感比较好的薄膜键盘?

想入个键盘,想买机械的但是太贵,求知友推荐一款手感比较好的薄膜键盘?

相信很多接触过286的90后朋友都和我有一样的体会,以前的机械键盘真的是让人头皮发麻,不仅敲击要非常用力,而且很吵。所以后面随着大家的生活消费水平的上升,家家户户都有电脑了,自然也不想再用打字来宣扬自己有电脑的优越感,基本上大家都换成了又轻...

自己拥有一台服务器可以做哪些很酷的事情?

自己拥有一台服务器可以做哪些很酷的事情?

我就有一台,跑了两年了,ipv6 ddns 网络,加虚拟化平台.跑了个 winserver 和 ubuntu 服务器。稳的雅皮!拆掉后盖,散热更好。烟盒固定硬盘。键盘防止灰尘掉落。电池拆掉,屏幕拆掉,也是散热考虑。屏幕拿去做便携副屏了。换...

怎样使自己处于高能量状态?

1、不要习惯性的回顾过去那些让你尴尬和犯了错误的事情,不要嫌弃自己蠢。学会原谅自己,当你不断回忆那些错误和囧事的时候,告诉自己:自己确实做错了,下次不要再犯即可,不需一遍遍的回忆。这件事情已经发生,不要再一遍遍的折磨自己,不断回忆一点好处没...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。