如何手动编译metrics-server镜像并部署

如何手动编译metrics-server镜像并部署


首先根据官方文档,查看 Metrics服务器,然后会根据提示点击到 github-kubernetes-sigs/metrics-server,下面是部署过程

过程如下

  • 根据官网的git地址,选择要安装的具体版本
#2020-12-14在github上,查看的latest release是v0.4.1
kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/download/v0.4.1/components.yaml
#如果能科学上网就不用修改安装文件,反之,需要先下载,修改下镜像地址,再执行部署
wget https://github.com/kubernetes-sigs/metrics-server/releases/download/v0.4.1/components.yaml
  • 自己手动制作镜像
# clone 源码
git clone https://github.com/kubernetes-sigs/metrics-server.git
#选择要制作的镜像tag
git tag
git checkout v0.4.1
#检测基础镜像是不是也有gcr.io?
➜  metrics-server git:(91dbeeb) cat Dockerfile | grep -i from
FROM golang:1.14.2 as build
FROM gcr.io/distroless/static:latest
COPY --from=build /go/src/sigs.k8s.io/metrics-server/metrics-server /
#解决所有需要科学上网的镜像问题gcr.io
下载gcr-io-distroless-stati.rar https://download.csdn.net/download/shenhonglei1234/13684957
docker load -i gcr-io-distroless-stati.rar 
docker image | grep static
## 制作镜像
mkdir build
docker build . -f Dockerfile -t k8s.gcr.io/metrics-server/metrics-server:v0.4.1
##过程如下
Sending build context to Docker daemon  14.07MB
Step 1/17 : FROM golang:1.14.2 as build
1.14.2: Pulling from library/golang
90fe46dd8199: Pull complete
35a4f1977689: Pull complete
bbc37f14aded: Pull complete
74e27dc593d4: Pull complete
38b1453721cb: Pull complete
780391780e20: Pull complete
0f7fd9f8d114: Pull complete
Digest: sha256:1bd634c5a72bfa7fb48d54e37dd5d8174161bd6ca601b7d132c7b68eaf513c6b
Status: Downloaded newer image for golang:1.14.2
 ---> 2421885b04da
Step 2/17 : WORKDIR /go/src/sigs.k8s.io/metrics-server
 ---> Running in 96e81531cb0a
Removing intermediate container 96e81531cb0a
 ---> 9d0927391b72
Step 3/17 : COPY go.mod .
 ---> 9f60e5015533
Step 4/17 : COPY go.sum .
 ---> 523142f52066
#如果这里下载比较慢的话,或者不能下载,请使用直接执行代理
#请参考 https://blog.csdn.net/shenhonglei1234/article/details/107933030
Step 5/17 : RUN go mod download
 ---> Running in 8fffbf196d65
Removing intermediate container 8fffbf196d65
 ---> db3645f8946e
Step 6/17 : COPY pkg pkg
 ---> 83cbfd06a366
Step 7/17 : COPY cmd cmd
 ---> 7f85f264e366
Step 8/17 : COPY Makefile Makefile
 ---> f111904bc8ca
Step 9/17 : ARG ARCH
 ---> Running in 0b0a7f75d5e5
Removing intermediate container 0b0a7f75d5e5
 ---> c271515d88af
Step 10/17 : ARG GIT_COMMIT
 ---> Running in 1e241ac12eec
Removing intermediate container 1e241ac12eec
 ---> 0807400e8b0b
Step 11/17 : ARG GIT_TAG
 ---> Running in 408cc6814cc6
Removing intermediate container 408cc6814cc6
 ---> 93d1121234ee
Step 12/17 : ARG BUILD_DATE
 ---> Running in 78a05f90f090
Removing intermediate container 78a05f90f090
 ---> 18c062a2e029
Step 13/17 : RUN make metrics-server
 ---> Running in dd252653029d
GOARCH=amd64 CGO_ENABLED=0 go build -ldflags "-X sigs.k8s.io/metrics-server/pkg/version.gitVersion= -X sigs.k8s.io/metrics-server/pkg/version.gitCommit= -X sigs.k8s.io/metrics-server/pkg/version.buildDate=2020-12-14T05:12:12Z" -o metrics-server sigs.k8s.io/metrics-server/cmd/metrics-server
Removing intermediate container dd252653029d
 ---> 6a577df71f43
Step 14/17 : FROM gcr.io/distroless/static:latest
 ---> 25b8fd42ff36
Step 15/17 : COPY --from=build /go/src/sigs.k8s.io/metrics-server/metrics-server /
 ---> 8ae2fdc5fd0d
Step 16/17 : USER 65534
 ---> Running in df725cb47b01
Removing intermediate container df725cb47b01
 ---> b677cdc44ad9
Step 17/17 : ENTRYPOINT ["/metrics-server"]
 ---> Running in 6f004c6d2af8
Removing intermediate container 6f004c6d2af8
 ---> 768fa6c1a0fb
Successfully built 768fa6c1a0fb
Successfully tagged k8s.gcr.io/metrics-server/metrics-server:v0.4.1
  • k8s启动metrics-server
#由于镜像k8s.gcr.io/metrics-server/metrics-server:v0.4.1本地已经有了,可以直接执行。
kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/download/v0.4.1/components.yaml
#或者文件下载到本地,然后执行
kubectl apply -f components.yaml
#如果删除需要执行
kubectl delete -f components.yaml
  • 运行记录如下
➜  metrics-server git:(91dbeeb) kubectl apply -f components.yaml
serviceaccount/metrics-server created
clusterrole.rbac.authorization.k8s.io/system:aggregated-metrics-reader created
clusterrole.rbac.authorization.k8s.io/system:metrics-server created
rolebinding.rbac.authorization.k8s.io/metrics-server-auth-reader created
clusterrolebinding.rbac.authorization.k8s.io/metrics-server:system:auth-delegator created
clusterrolebinding.rbac.authorization.k8s.io/system:metrics-server created
service/metrics-server created
deployment.apps/metrics-server created
apiservice.apiregistration.k8s.io/v1beta1.metrics.k8s.io created
  • k8s启动Pod遇到unable to fully scrape metrics x509: cannot validate certificate
#集群节点没问题,刚才创建的pod出现异常 状态是CrashLoopBackOff
kubectl get pods --all-namespaces
#查看此状态pod详细情况
kubectl describe pods metrics-server-866b7d5b74-2w9r2 -n kube-system
#查看此pod日志
kubectl logs metrics-server-866b7d5b74-2w9r2 -n kube-system
#根据日志发现,原因是unable to fully scrape metrics: unable to fully scrape metrics from node docker-desktop: unable to fetch metrics from node docker-desktop: Get "https://192.168.65.3:10250/stats/summary?only_cpu_and_memory=true": x509: cannot validate certificate for 192.168.65.3 because it doesn't contain any IP SANs
#如何修复呢? -添加- --kubelet-insecure-tls
  template:
    metadata:
      labels:
        k8s-app: metrics-server
    spec:
      containers:
      - args:
        - --cert-dir=/tmp
        - --secure-port=4443
        - --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname
        - --kubelet-use-node-status-port
        - --kubelet-insecure-tls
        image: k8s.gcr.io/metrics-server/metrics-server:v0.4.1
  • 验证metrics-server
➜  Desktop kubectl top nodes
NAME             CPU(cores)   CPU%   MEMORY(bytes)   MEMORY%
docker-desktop   308m         7%     1794Mi          37%

注意

猜你喜欢

转载自blog.csdn.net/shenhonglei1234/article/details/111173429
今日推荐