环境:wsl——Ubuntu,具备docker环境
1. 安装 kubectl
- 在此找到对应版本:https://github.com/kubernetes/kubernetes/releases
- 在此找到与系统对应的版本:https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.20.md#v1200-alpha1
我选择的是这个二进制版本
- 下载:
wget https://dl.k8s.io/v1.20.0-alpha.1/kubernetes-client-linux-arm64.tar.gz
- 解压:
tar -xzvf kubernetes-client-linux-amd64.tar.gz
- 解压后的目录为kubernetes,执行命令
mv kubernetes/client/bin/kubectl /usr/local/bin
- 验证一下:
kubectl
2. 安装minikube
- 在此下载对应的系统版本:https://github.com/kubernetes/minikube/releases/tag/v1.13.1
- 下载:
wget https://github.com/kubernetes/minikube/releases/download/v1.13.1/minikube-linux-amd64.tar.gz
我选择的是下面这个版本
- 解压:
tar -xzvf minikube-linux-amd64.tar.gz
- 解压后目录为out,执行命令:
mv out/minikube-linux-amd64 /usr/local/bin/minikube
- 验证一下:
minikube
3.发布一个应用
1.启动
minikube start --registry-mirror=https://registry.docker-cn.com
发现docker 驱动不允许root账号来使用。
自行用
groupadd
和useradd
增加了一个docker的用户组合用户。切下用户,启动:
发现报错了,这个是因为我之前启动过。
Google了一下,找到了解决方式:
执行一下命令:
minikube delete --all --purge
再启动,发现可以了:
正在拉取镜像。
发现有点慢,换一个阿里的镜像源试试:
minikube start --vm-driver=docker --base-image="anjone/kicbase" --registry-mirror=https://f1z25q5p.mirror.aliyuncs.com
又遇到一个新的问题:
退出来切到root账号,再执行一下Suggestion的命令,再重新运行,发现可以了:
2.发布应用
- 创建 hello-world 部署
kubectl create deployment hello-world --image=tomcat:8.0 --port=8080
- 发布服务
kubectl expose deployment hello-world --type=NodePort
- 查看 pods
kubectl get pods
部署完成后,状态就变成了 Running
- 查看 service
kubectl get services
- 获取服务地址
minikube service hello-world --url
curl 一下,发现服务能正常服务了:
3.使用yml配置文件发布应用
- 1.新建一个目录go-app,用go写一个简单的http server
package main
import (
"fmt"
"net/http"
)
func index(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "<h1>Hello World</h1>")
}
func check(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "<h1>Health check</h1>")
}
func main() {
http.HandleFunc("/", index)
http.HandleFunc("/health_check", check)
fmt.Println("Server starting...")
http.ListenAndServe(":3000", nil)
}
- 2.制作程序镜像
在目录go-app里面,创建一个Dockerfile
FROM golang:alpine
RUN mkdir /app
COPY . /app
WORKDIR /app
RUN go build -o main .
CMD ["/app/main"]
build 一下
docker build -t 10xjzheng/go-hello-world .
然后我把它push到我的仓库,执行:
docker push 10xjzheng/go-hello-world
测试一下:
docker run -d -p 3333:3000 --rm --name go-app-container 10xjzheng/go-hello-world
curl 一下:
curl http://127.0.0.1:3333
Pass !!!
- 3.编写部署清单文件
文件名:deployment.yaml,内容如下:
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-go-app
spec:
replicas: 1 # 副本
selector:
matchLabels:
app: my-go-app
template:
metadata:
labels:
app: go-app
spec:
containers:
- name: go-app-container
image: 10xjzheng/go-hello-world
resources:
limits:
memory: "128Mi"
cpu: "500m"
ports:
- containerPort: 3000
- 4.部署应用
根据部署清单创建应用
kubectl create -f deployment.yaml
- 5.暴露应用给外部
kubectl expose deployment my-go-app --type=NodePort --name=go-app-svc --target-port=3000
查看一下pods和service
6.获取访问的url
minikube service go-app-svc --url
验证一下:
可以啦
赶快试试吧,enjoy it~
参考文章:
https://www.jianshu.com/p/18441c7434a6
https://blog.csdn.net/bbwangj/article/details/82558033
https://stackoverflow.com/questions/62711512/error-from-server-notfound-deployments-extensions-keras-app-not-found
https://mp.weixin.qq.com/s/uruu3qbpSLbTRJJRcWTYqg