文件变成镜像,push到本地仓库
将写好的文件main.go,build成一个可执行文件
go build main
然后写一个dockerfile,将执行文件跑成个镜像
vim Dockerfile
FROM golang:latest
ADD main /mnt
EXPOSE 9001
将镜像push到镜像仓库
docker build -t prometheus-expoler:v1 .
docker tag core-harbor.linkedcare.cn/test/prometheus-expoler
docker login core-harbor.linkedcare.cn
docker push core-harbor.linkedcare.cn/test/prometheus-expoler:v1
在k8s上两个yaml文件,一个deployment,一个service
创建deployment文件,指定镜像路径,和command执行步骤
apiVersion: apps/v1 # 当前配置格式的版本
kind: Deployment # 要创建的资源的类型
metadata: # 资源的元素据
name: prometheus-expoler
spec: # 资源的说明书
replicas: 2 # 副本数量
selector:
matchLabels:
app: prometheus-expoler
template:
metadata:
labels:
app: prometheus-expoler
spec:
containers:
- name: prometheus-expoler
image: core-harbor.linkedcare.cn/test/prometheus-expoler:v1
command: ["/mnt/main"] #执行/mnt/main二进制文件
# args:
# - '-storage.local.retention=$(STORAGE_RETENTION)'
# - '-storage.local.memory-chunks=$(STORAGE_MEMORY_CHUNKS)'
# - '-config.file=/etc/prometheus/prometheus.yml'
# - '-alertmanager.url=http://alertmanager:9093/alertmanager'
# - '-web.external-url=$(EXTERNAL_URL)'
ports: #暴露容器端口
- containerPort: 9001
定义service,目的是外部提供访问接口
apiVersion: v1
kind: Service
metadata:
name: prometheus-service
spec:
ports:
- port: 9001
nodePort: 31080
targetPort: 9001
selector:
app: prometheus-expoler
type: NodePort
**
kubectl apply -f prometheus_expoler_node.yaml 创建deployment
kubectl get deployment 看节点状态
kubectl exec -it prometheus-expoler-69d775f4f9-qptrl /bin/bash //可以进到这个deployment里面 ps -aux查看具体文件执行信息
kubectl get pod -o wide //查看pod的具体信息
**
curl 访问pod的ip 可以看到数据
此时,回顾一下我做了什麼
1.利用go语言编写一个采集服务器数据的文件,这个文件会将采集到的数据返回给本机的9001端口
2.将go文件build成一个可执行的二进制文件,并且利用dockerfile将它build到镜像中
3.登陆本地仓库,利用docker tag 改标签,然后push到本地仓库,以供k8s调用
4.登陆k8s服务器,编写deployment发布文件,从仓库拉取镜像跑到对应的pod
5.编写service文件,为外界访问服务提供接口
K8S Pod status的状态分析
CrashLoopBackOff: 容器退出,kubelet正在将它重启
InvalidImageName: 无法解析镜像名称
ImageInspectError: 无法校验镜像
ErrImageNeverPull: 策略禁止拉取镜像
ImagePullBackOff: 正在重试拉取
RegistryUnavailable: 连接不到镜像中心
ErrImagePull: 通用的拉取镜像出错
CreateContainerConfigError: 不能创建kubelet使用的容器配置
CreateContainerError: 创建容器失败
internalLifecycle.PreStartContainer 执行hook报错
RunContainerError: 启动容器失败
PostStartHookError: 执行hook报错
ContainersNotInitialized: 容器没有初始化完毕
ContainersNotReady: 容器没有准备完毕
ContainerCreating:容器创建中
PodInitializing:pod 初始化中
DockerDaemonNotReady:docker还没有完全启动
NetworkPluginNotReady: 网络插件还没有完全启动
**
kubectl apply -f prometheus_expoler_node.yaml //添加deployment
kubectl get deployment //查看deployment
kubectl get pod //查看pod信息
kubectl get pod -o wide //查看pod的具体信息
kubectl describe pod //查看pod详细信息,可以看出报错
kubectl exec -it prometheus-expoler-69d775f4f9-qptrl /bin/bash //可以进到这个deployment里面 ps -aux查看具体文件执行信息
kubectl delete deployments.apps prometheus-expoler //删除deployment
kubect delete pod 。。。 //删除pod节点(只删pod删不掉的,先删去pod对应的deployment,再删pod)
kubectl delete -f promtheusRule.yaml**