网站的管理系统,做特产的网站的分析,生鲜配送网站建设,cpa广告网站怎么做上一部分与大家分享到 Statefulset 与 RplicaSet 的区别#xff0c;以及 Statefulset 的特点#xff0c;能做的一些事情及一些注意事项
现在我们来尝试使用 Statefulset 来部署我们的应用#xff0c;我们可以需要有应用程序#xff0c;然后有持久化卷
开始使用 Statefuls…上一部分与大家分享到 Statefulset 与 RplicaSet 的区别以及 Statefulset 的特点能做的一些事情及一些注意事项
现在我们来尝试使用 Statefulset 来部署我们的应用我们可以需要有应用程序然后有持久化卷
开始使用 Statefulset 部署应用
Statefulset 部署应用我们需要完成这些资源的创建
制作应用程序和镜像编写 Service编写 Statefulset 指定 pod 模板及挂载
制作应用程序和镜像
编写应用程序
此处我们可以制作一个应用程序会写数据到磁盘的某个路径下面现在就用 golang 来简单写一个 http 服务器
监听 8080 端口提供 GET 和 POST 请求 收到 GET 请求的时候读取 /var/data/stateful.txt 中的内容收到 POST 请求的时候会将请求的内容写入到 /var/data/stateful.txt 文件中
文件目录是这样的 main.go 可以分为这几个部分
http 服务器部分 const (filePath /var/data/stateful.txtfileDir /var/data
)func main() {r : gin.Default()r.GET(/, func(c *gin.Context) {str, err : readFileContent(filePath)if err ! nil {fmt.Println( readFileContent err : , err)return}//输出json结果给调用方c.JSON(200, gin.H{message: str,})})r.POST(/, func(c *gin.Context) {buf : make([]byte, 1024)n, _ : c.Request.Body.Read(buf)fmt.Println(string(buf[0:n]))err : writeFileContent(filePath, buf[0:n])if err ! nil {fmt.Println( writeFileContent err : , err)return}//输出json结果给调用方c.JSON(http.StatusOK, gin.H{message: string(buf[0:n]),})})r.Run(:8080)
}
使用了 golang 中的 gin 框架提供一个 GET 和 一个 POST 方法GET 方法用于读取文件内容POST 方法用于写入文件内容
写文件部分
func processFileErr(err error, file string) (*os.File, error) {var f *os.Fileif os.IsNotExist(err) {gErr : os.MkdirAll(fileDir, 0775)if gErr ! nil {fmt.Println(MkdirAll file error : , gErr)return nil, gErr}f, gErr os.Create(file)if gErr ! nil {fmt.Println(Create file error : , gErr)return nil, gErr}} else {fmt.Println(OpenFile file error : , err)return nil, err}return f, nil
}func writeFileContent(file string, content []byte) error {f, err : os.OpenFile(file, os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0775)if err ! nil {var pErr errorf, pErr processFileErr(err, file)if pErr ! nil {fmt.Println(processFileErr error : , pErr)return pErr}}defer f.Close()fmt.Println(Write content : , string(content))_, err f.Write(content)if err ! nil {fmt.Println(Write file error : , err)return err}return nil
}writeFileContent 方法主要是用来写入数据到文件中
processFileErr 会处理文件不存在的错误信息同时会创建不存在的路径和文件并返回创建文件的文件指针
读取文件信息部分
func readFileContent(file string) (string, error) {f, err : os.OpenFile(file, os.O_RDWR|os.O_CREATE, 0775)if err ! nil {var pErr errorf, pErr processFileErr(err, file)if pErr ! nil {fmt.Println(processFileErr error : , pErr)return , pErr}}defer f.Close()buf : make([]byte, 1024)n, err : f.Read(buf)if err io.EOF {return , nil}if err ! nil {fmt.Println(Read file error : , err)}fmt.Println(read content : , string(buf))return string(buf[0:n]), nil
}读取文件部分同样需要使用 processFileErr 处理文件不存在的错误信息主要是从传入的文件中读取文件内容以字符串的形式作为函数返回值
制作镜像
Dockerfile
将 myhttp 可执行程序加入到镜像中
FROM node:7
ADD myhttp /myhttp
ENTRYPOINT [./myhttp]执行如下指令制作镜像
看到这里的兄弟请将镜像传到你自己的账号下面记得登录哦
docker build -t xiaomotong888/sta-kubia .
docker push xiaomotong888/sta-kubia上传镜像之后我们可以通过 docker search 账号名 来查看自己的镜像列表看到如下内容说明可以往下继续完成其他步骤了 编写 Service
接下来便是编写 Service 部分的清单了我们在玩 Statefulset 管理 pod 的时候咱们创建的是有状态的 pod咱们还需要创建一个 headless Service 来给 pod 之间提供网络标识
例如我们可以这样来创建
sta-service.yaml
apiVersion: v1
kind: Service
metadata:name: sta-kubia
spec:clusterIP: Noneselector:app: sta-kubiaports:- name: httpport: 80创建的一个 Service
名称为 sta-kubia选择的 pod 标签是 sta-kubiasvc 集群内部的端口是 80
这里需要注意的是我们之前写 Service 清单的时候如果不指定 type那么 Service 默认是 clusterIP但是现在我们是连 clusterIP 都不想要我们需要将 clusterIP 置为 None
通过 kubectl create -f sta-service.yaml 创建一个 Service 可以看到 CLUSTER-IP 一栏为 None 即为正确创建好 Service curl localhost:8001/api/v1/namespaces/default/pods/sta-kubia-0/proxy/curl -X POST -d helloworld sta-kubia-0 localhost:8001/api/v1/namespaces/default/pods/sta-kubia-0/proxy/今天就到这里学习所得若有偏差还请斧正
欢迎点赞关注收藏
朋友们你的支持和鼓励是我坚持分享提高质量的动力 好了本次就到这里
技术是开放的我们的心态更应是开放的。拥抱变化向阳而生努力向前行。
我是阿兵云原生欢迎点赞关注收藏下次见~
更多的可以查看 零声每晚八点直播https://ke.qq.com/course/417774