We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
在生成环境中,线上的每个服务不能受单个节点故障的影响,同时我们还要根据负载均衡动态调整节点的数量。所以不大可能逐个的通过 Pod 来部署管理应用, k8s 通过 Deployment 能够创建指定数量的 Pod 部署到不同的 Node 上,并且能够很方便的对应用进行升级和回滚操作。
这里以部署一个 Golang 应用为例,来看下一个高可用服务在生产环境常用到的一些操作
创建一个名为 server.go 的文件,代码如下
package main import ( "fmt" "log" "net/http" "os" ) func homePage(w http.ResponseWriter, r *http.Request) { host, err := os.Hostname() check(err) fmt.Fprintf(w, "Welcome to the HomePage! \n\nHostname is %s", host) fmt.Println("Endpoint Hit: homePage") } func check(err error) { if err != nil { fmt.Println(err) os.Exit(1) } } func handleRequests() { http.HandleFunc("/", homePage) log.Fatal(http.ListenAndServe(":3000", nil)) } func main() { handleRequests() }
启动应用
go run server.go
查看应用效果
Dockerfile 文件
FROM golang:alpine WORKDIR /data/project COPY ./ ./ RUN go build -o server . CMD ["./server"]
通过以上代码文件以及 Dockerfile文件构建一个镜像,镜像名为 lqshow/golang-app:0.0.1
首先定义 deploy.yml 文件
apiVersion: v1 kind: Service metadata: name: golang-app-svc labels: app: golang-app spec: ports: - port: 3000 nodePort: 30081 selector: app: golang-app type: NodePort --- apiVersion: extensions/v1beta1 kind: Deployment metadata: name: golang-app-deploy labels: app: golang-app spec: replicas: 3 template: metadata: labels: app: golang-app spec: containers: - name: golang-app-container image: lqshow/golang-app:0.0.1 ports: - containerPort: 3000
执行以下命令部署应用
kubectl create -f deploy.yml --record
查看部署情况
根据实际运营情况,一个服务扩容和缩容是经常碰到的问题,有两种方法可以实现该操作
# 通过kubectl scale指令来扩容和缩容 kubectl scale deploy/golang-app-deploy --replicas=4 # 通过更改 deploy.yml 中的 replicas 值来扩容 # replicas: 4 kubectl apply -f deployment.yaml --record
假设我们对项目做了更新,比如加了一个新的接口,这时候就要发布一个新版本,需要构建一个新的镜像 lqshow/golang-app:0.0.2。
如果我们只是更新一个镜像版本,可通过如下命令实现
kubectl set image deploy/golang-app-deploy golang-app-container=lqshow/golang-app:0.0.2
验证新加的接口是否生效
如果我们既要更新镜像版本,又要扩容,还是通过更新配置文件方便些
kubectl apply -f deploy_rolling_update.yml --record
查看发布状态
kubectl rollout status deployment golang-app-deploy
查看更新的历史
➜ kubernetes git:(master) ✗ kubectl rollout history deployment golang-app-deploy deployments "golang-app-deploy" REVISION CHANGE-CAUSE 1 kubectl apply --filename=deploy.yml --record=true 2 kubectl set image deploy/golang-app-deploy golang-app-container=lqshow/golang-app:0.0.2 3 kubectl apply --filename=deploy_rolling_update.yml --record=true
查看某个具体版本
➜ kubernetes git:(master) ✗ kubectl rollout history deployment golang-app-deploy --revision=3 deployments "golang-app-deploy" with revision #3 Pod Template: Labels: app=golang-app pod-template-hash=3862271339 Annotations: kubernetes.io/change-cause=kubectl apply --filename=deploy_rolling_update.yml --record=true Containers: golang-app-container: Image: lqshow/golang-app:0.0.2 Port: 80/TCP Host Port: 0/TCP Environment: <none> Mounts: <none> Volumes: <none>
如果发布后发现重大 Bug,需要回滚到老版本,可执行以下命令
# 回滚到指定版本 kubectl rollout undo deployment/golang-app-deploy --to-revision=1
The text was updated successfully, but these errors were encountered:
No branches or pull requests
在生成环境中,线上的每个服务不能受单个节点故障的影响,同时我们还要根据负载均衡动态调整节点的数量。所以不大可能逐个的通过 Pod 来部署管理应用, k8s 通过 Deployment 能够创建指定数量的 Pod 部署到不同的 Node 上,并且能够很方便的对应用进行升级和回滚操作。
这里以部署一个 Golang 应用为例,来看下一个高可用服务在生产环境常用到的一些操作
创建 Golang 应用
准备代码文件
创建一个名为 server.go 的文件,代码如下
启动应用
查看应用效果
生成镜像
Dockerfile 文件
通过以上代码文件以及 Dockerfile文件构建一个镜像,镜像名为 lqshow/golang-app:0.0.1
k8s 管理应用
创建 Deployment
首先定义 deploy.yml 文件
执行以下命令部署应用
查看部署情况
横向扩展
根据实际运营情况,一个服务扩容和缩容是经常碰到的问题,有两种方法可以实现该操作
滚动更新
假设我们对项目做了更新,比如加了一个新的接口,这时候就要发布一个新版本,需要构建一个新的镜像 lqshow/golang-app:0.0.2。
如果我们只是更新一个镜像版本,可通过如下命令实现
kubectl set image deploy/golang-app-deploy golang-app-container=lqshow/golang-app:0.0.2
验证新加的接口是否生效
如果我们既要更新镜像版本,又要扩容,还是通过更新配置文件方便些
查看发布状态
版本回滚
查看更新的历史
查看某个具体版本
如果发布后发现重大 Bug,需要回滚到老版本,可执行以下命令
# 回滚到指定版本 kubectl rollout undo deployment/golang-app-deploy --to-revision=1
References
The text was updated successfully, but these errors were encountered: