在k8s裡面部署自己的go web服務
我們的目標
今天,試一下在k8s裡面跑自己編寫的go web服務。
1、編寫可執行的go服務
首先,第一步當然是寫一個簡單的go服務,這裡簡單寫了一個http的服務。
package main import ( "fmt" "net/http" ) func main() { http.HandleFunc("/", hello) server := &http.Server{ Addr: ":8888", } fmt.Println("server startup...") if err := server.ListenAndServe(); err != nil { fmt.Printf("server startup failed, err:%v\n", err) } } func hello(w http.ResponseWriter, _ *http.Request) { w.Write([]byte("hello layu!")) }
一個最簡單的http服務,監聽8080埠,返回 "hello layu" 字串。
2、製作docker映象
接著,我們需要製作映象,製作docker映象需要寫 Dockerfile 檔案
FROM golang:alpine ENV GO111MODULE=on \ CGB_ENABLED=0 \ GOOS=linux \ GOARCH=amd64 WORKDIR /build COPY . . RUN go mod init main RUN go build -o app . EXPOSE 8888 CMD ["/build/app"]
在Dockerfile的目錄下執行 docker build
docker build . -t hello_layu:v1.0
需要注意的點
1)映象如果拉取的比較慢,可以使用國內源
#cat /etc/docker/daemon.json { "registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"], #這句話就是指定用中國科技大學的映象 "exec-opts": ["native.cgroupdriver=systemd"], "log-driver": "json-file", "log-opts": { "max-size": "100m" }, "storage-driver": "overlay2" }
修改配置之後,記得檢查一下json格式有沒有錯,比如少一個雙引號,多一個逗號啥的
檢查無誤之後就重啟一下docker服務
systemctl restart docker
2)因為沒有配置映象倉庫,所以假設你的k8s有三個node,則都需要
執行一遍docker build,防止被排程到的node
本地沒有映象,然後拉不到報錯
3、用k8s執行本地映象
接著就是用k8s執行本地映象
編寫yaml檔案
[root@c4 k8s]# cat hello_layu.yaml apiVersion: apps/v1 kind: Deployment metadata: name: hello-layu-deployment labels: app: hello-layu spec: selector: matchLabels: app: hello-layu replicas: 2 template: metadata: labels: app: hello-layu spec: containers: - name: hello-layu image: hello_layu:v1.0 imagePullPolicy: Never ports: - containerPort: 8888
注意到imagePullPolicy是Never,因為是本地的映象,沒有搭建映象倉庫,如果去pull的話,會報錯
service的yaml檔案
[root@c4 k8s]# cat service.yaml apiVersion: v1 kind: Service metadata: name: hello-layu spec: type: LoadBalancer selector: app: hello-layu ports: - port: 80 targetPort: 8888
簡單的kubectl apply
kubectl apply -f ./hello_layu.yaml kubectl apply -f ./service.yaml
最後查一下service的 cluster-ip,然後curl一把,就能看到“hello layu!" 字串回來啦
[root@c4 ~]# kubectl get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE hello-layu LoadBalancer 10.106.136.147 <pending> 80:31986/TCP 111m kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 18h [root@c4 ~]# curl http://10.106.136.147 hello layu![root@c4 ~]
相關文章
- 使用 k8s 快速部署應用服務K8S
- Kubernetes(K8s)部署 SpringCloud 服務實戰K8SSpringGCCloud
- 部署 k8s 服務, flannel pod 報錯K8S
- 在K8S中,如何看待公司從單一服務轉向微服務並部署其服務容器?K8S微服務
- 用 GitHub Actions 部署 Go 語言服務GithubGo
- 【go-web服務端】入門教程GoWeb服務端
- Go Web 服務框架實現詳解GoWeb框架
- 【k8s】使用k8s部署一個簡單的nginx服務K8SNginx
- 基於Kubernetes(k8s)部署Dubbo+Nacos服務K8S
- 基於K8S部署fission函式即服務K8S函式
- 主流 go-web 服務端框架效能測試GoWeb服務端框架
- 在自己的域名網站安裝Kubernetes並暴露服務網站
- 在自己的 app 中使用 Sarfari 開發工具除錯 Web 頁面APP除錯Web
- [譯] 在 GO 語言中建立你自己的 OAuth2 服務:客戶端憑據授權流程GoOAuth客戶端
- 「Laravel 服務容器」自己的理解Laravel
- Redis在.net中的使用(7)redis部署為Windows服務RedisWindows
- 如何在 GPU 深度學習雲服務裡,使用自己的資料集?GPU深度學習
- NFS服務部署NFS
- LDAP 服務部署LDA
- Go For Web:一篇文章帶你用 Go 搭建一個最簡單的 Web 服務、瞭解 Golang 執行 web 的原理WebGolang
- 在 k8s 中部署 PrometheusK8SPrometheus
- Web函式請求多併發上線,Web服務部署更快更省!Web函式
- Linux web服務LinuxWeb
- CentOS 7 Docker安裝部署Go WebCentOSDockerGoWeb
- 在kubernetes 叢集內訪問k8s API服務K8SAPI
- k8s Service 服務K8S
- 乾淨架構在 Web 服務開發中的實踐架構Web
- 私有化輕量級持續整合部署方案--03-部署web服務(上)Web
- 私有化輕量級持續整合部署方案--03-部署web服務(下)Web
- 將普通web專案(FWGL 服務管理)用idea 部署到tomcatWebIdeaTomcat
- 使用BeetleX在Linux下部署.NET多站點服務Linux
- 微服務從程式碼到k8s部署應有盡有系列(七、支付服務)微服務K8S
- Vercel 部署 Node 服務
- FTP服務端部署FTP服務端
- Linux 部署 Nginx 服務LinuxNginx
- 在滴滴雲快速搭建自己的簡易服務叢集[入門版]
- 還在擔心服務掛掉?Sentinel Go 讓服務穩如磐石Go
- 搭建 Restful Web 服務RESTWeb