婁底建設(shè)網(wǎng)站制作外貿(mào)網(wǎng)站
搭建K8S基礎(chǔ)環(huán)境
如果已經(jīng)有K8S環(huán)境的同學(xué)可以跳過,如果沒有,推薦你看看我的《Ubuntu22加Minikue搭建K8S環(huán)境》,課程目錄如下:
Ubuntu22安裝Vscode
下載:https://code.visualstudio.com/Download
安裝命令:
sudo dpkg -i code_1.85.1-1702462158_amd64.deb
Ubuntu22搭建Golang開發(fā)環(huán)境
下載:https://studygolang.com/dl
將其上傳到Downloads目錄下。
解壓:
tar -xzvf go1.21.5.linux-amd64.tar.gz
將其移動(dòng)到特定目錄:
mv go /usr/local/go1.21
配置環(huán)境變量:
vim ~/.bashrc# 添加如下配置
export GOROOT=/usr/local/go1.21
export GOPATH=/home/zhangdapeng/go
export GOBIN=$GOPATH/bin
export PATH=$PATH:$GOROOT/bin
export PATH=$PATH:$GOPATH/bin
export GOPROXY=https://goproxy.io,direct
激活環(huán)境變量并測(cè)試:
source ~/.bashrc
go version
Vscode配置Golang環(huán)境
第一步:安裝Go插件
第二步:安裝Golang依賴
go install golang.org/x/tools/cmd/guru@latest
go install golang.org/x/tools/cmd/gorename@latest
go install golang.org/x/tools/cmd/fiximports@latest
go install golang.org/x/tools/cmd/gopls@latest
go install golang.org/x/tools/cmd/godex@latest
編寫第一個(gè)Go程序
第一步:創(chuàng)建項(xiàng)目目錄
mkdir -p ~/zdpgo/zdpgo_k8s
第二步:創(chuàng)建mod
cd ~/zdpgo/zdpgo_k8s
go mod init zdpgo_k8s
第三步:使用vscode打開目錄
code .
第四步:創(chuàng)建main.go
package mainimport "fmt"func main(){fmt.Println("你好,張大鵬")
}
運(yùn)行Go程序:
go run main.go
編寫Golang HTTP應(yīng)用
main.go
package mainimport ("fmt""log""net/http"
)func main() {http.HandleFunc("/", handleIndex)log.Fatal(http.ListenAndServe(":18888", nil))
}func handleIndex(writer http.ResponseWriter, request *http.Request) {fmt.Fprintln(writer, "你好,張大鵬")
}
運(yùn)行:
go run main.go
瀏覽器訪問:http://localhost:18888/
使用Docker部署Web應(yīng)用
創(chuàng)建Dockerfile
FROM golang:1.21-alpine AS build# 第一次構(gòu)建容器
WORKDIR /src/
COPY main.go go.* /src/
RUN export GOPROXY=https://goproxy.io && CGO_ENABLED=0 go build -o /bin/demo# 第二次構(gòu)建容器
FROM scratch
COPY --from=build /bin/demo /bin/demo
EXPOSE 18888
ENTRYPOINT ["/bin/demo"]
如果已經(jīng)存在鏡像,刪除原來(lái)的鏡像,否則可以跳過:
docker rmi myhello
構(gòu)建鏡像:
docker build -t myhello .
運(yùn)行容器:
docker run --name myhello -p 9998:18888 -d myhello
瀏覽器訪問:http://localhost:9998
使用K8S部署Docker鏡像
登錄Docker Hub
先注冊(cè)一個(gè)Docker Hub的賬號(hào) ,然后執(zhí)行下面的命令登錄:
docker login
命名和推送鏡像
# 給鏡像命名
docker image tag myhello zhangdapeng520/myhello# 將鏡像推送到Docker Hub
docker image push zhangdapeng520/myhello
K8S部署鏡像
如果之前的容器沒有刪除,則先刪除之前的容器:
docker stop myhello
docker rm myhello
使用K8S部署myhello:
# 從遠(yuǎn)程拉取鏡像并部署
kubectl run demo --image=zhangdapeng520/myhello --port 18888 --labels app=demo# 部署本地鏡像 imagePullPolicy: Never
kubectl run demo --image=zhangdapeng520/myhello --image-pull-policy=IfNotPresent --port 18888 --labels app=demo
查看K8S部署的容器狀態(tài)
部署以后,通過以下命令,可以查看我們部署的容器的狀態(tài):
kubectl get pods --selector app=demo
啟用K8S的端口轉(zhuǎn)發(fā)
此時(shí),我們?cè)L問 http://localhost:18888/ 是沒有辦法成功的。因?yàn)槲覀冊(cè)谑褂肈ocker進(jìn)行部署的時(shí)候,也需要做端口轉(zhuǎn)發(fā)才能夠正常訪問,部署到K8S的時(shí)候,也需要進(jìn)行端口轉(zhuǎn)發(fā)才能夠正常訪問。
通過以下命令,可以實(shí)現(xiàn)K8S的端口轉(zhuǎn)發(fā):
kubectl port-forward pod/demo 9998:18888
這里的 pod/demo 是我們K8S部署的時(shí)候,指定的run demo
。這里的9998:18888
就和Docker的映射方式類似了,將宿主機(jī)的9998端口映射到K8S的18888端口。
端口轉(zhuǎn)發(fā)以后,我們?cè)L問 http://localhost:9998/ 就可以成功了。
刪除容器
使用以下命令,可以刪除部署到K8S的容器:
kubectl delete pod demo