kubernetes集群安装Addons组件

2025/04/06 k8s kubernetes ingress helm openelb metrics-server krm 共 5900 字,约 17 分钟

kubernetes集群安装Addons组件

1.openelb安装 :

官方参考文档

github官方安装地址:

kubectl apply -f https://raw.githubusercontent.com/openelb/openelb/master/deploy/openelb.yaml
如果直接安装无法访问请下载来来,如果下载不了,联系我
wget https://raw.githubusercontent.com/openelb/openelb/master/deploy/openelb.yaml

或github官方 但需要下载镜像这里我已经反镜像下载好,并重新替换了, 放在我的github中 下载到/root/openelb下:

安装openelb

cd /root/openelb
kubectl apply -f openelb.yaml
kubectl get pod -n openelb-system

openelb

创建eip地址池,这里的地址要和节点地址一致,如我们集群节点ip段为 192.168.1.0/24 因此这里创建地址池:

# cat eip-pool.yaml
apiVersion: network.kubesphere.io/v1alpha2
kind: Eip
metadata:
    name: eip-pool
    annotations:
      eip.openelb.kubesphere.io/is-default-eip: "true"
spec:
    address: 192.168.1.70-192.168.1.90     # dhcp保留地址
    priority: 100
    disable: false
    protocol: layer2
    interface: enp0s3                      # 节点网卡可通过ip link show查看

验证安装nginx服务

kubectl create deployment demoapp --image=registry.cn-hangzhou.aliyuncs.com/san2005/public:nginx_lts --replicas=2

基于openelb创建LoadBalancer类似service

cat demoapp.yaml 
apiVersion: v1
kind: Service
metadata:
  name: demoapp
  annotations:
    lb.kubesphere.io/v1alpha1: openelb
spec:
  type: LoadBalancer
  ports:
  - port: 80
    targetPort: 80
    selector:
    app: demoapp
kubectl apply -f demoapp.yaml
kubectl get svc demoapp

NAME      TYPE           CLUSTER-IP     EXTERNAL-IP    PORT(S)        AGE
demoapp   LoadBalancer   10.96.106.55   192.168.1.71   80:30599/TCP   16m

可以看到已经获取了ip  192.168.1.71 浏览器访问http://192.168.1.71

2.安装helm

官方安装参考文档 Helm客户端安装

wget https://get.helm.sh/helm-v3.17.2-linux-amd64.tar.gz
tar xvf helm-v3.17.2-linux-amd64.tar.gz -C /usr/local/bin/

Helm Charts仓库 添加bitnami和官方helm仓库:

helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo add stable https://charts.helm.sh/stable

Helm 简单使用: 查询包:

helm search repo bitnami/redis
查询历史版本:
helm search repo bitnami/redis -l 或 --versions
下载版本:
helm pull bintnami/xxx  --version 版本
安装 包(名称空间隔离性):
helm install -n NS xxx .
查看:
helm list -n ns
更新配置: helm upgrade -n NS  xxx包 .

3.ingress安装

yaml直接安装

kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.12.0/deploy/static/provider/cloud/deploy.yaml

安装yam文件 官方使用示例

这里通过helm安装

helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm repo update
helm pull  ingress-nginx/ ingress-nginx
tar xvf ingress-nginx-4.12.0.tgz
cd ingress-nginx/
vim values.yaml  # 先将里面的镜像手动下载传到个人仓库中

如果以上下载慢或无法下载 这里下载 vlues.yaml中的镜像可以直接替换后类似如下:

cat values.yaml |egrep "image:|registry:"|grep -v "#"
  image:
    registry: registry.k8s.io
  image:
    registry: registry.cn-hangzhou.aliyuncs.com
    image: san2005/public
      image:
        registry: registry.cn-hangzhou.aliyuncs.com
        image: san2005/public
  image:
    image: defaultbackend-amd64

cd ingress-nginx/   vlues.yaml所在目录
kubectl create ns  ingress-nginx
helm install ingress-nginx -n ingress-nginx . 
[root@k8s-master01 ingress-nginx]# kubectl get svc -n ingress-nginx

ingress

4.安装metrics-server

官方文档 安装 :

kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml

或者直接从我的github中安装 :区别在于里面的镜像替换成阿里云镜像

kubectl apply -f https://raw.githubusercontent.com/sysant/sysant.github.io/refs/heads/master/k8s/metrics-server/metrics-server.yaml
kubectl get pod  -n kube-system -l k8s-app=metrics-server

metrics-server

kubectl top node

metrics-server02

5.KRM大盘安装

k8s官方dashboard功能较强弱,第三方有很多,这里参考杜宽大佬的KRM

kubectl create ns krm
kubectl create sa krm-backend -n krm
kubectl create rolebinding krm-backend --clusterrole=edit --serviceaccount=krm:krm-backend --namespace=krm
kubectl create clusterrole namespace-creater --verb=create --resource=namespaces
 kubectl create clusterrolebinding krm-backend-ns-creater --clusterrole=namespace-creater --serviceaccount=krm:krm-backend --namespace=krm

生成密码:

echo -n "admin" |md5sum |tr a-z A-Z

21232F297A57A5A743894A0E4A801FC3  -

部署后端 服务

cat <<EOF | kubectl -n krm apply -f -
---
apiVersion: v1
kind: Service
metadata:
  labels:
    app: krm-backend
  name: krm-backend
spec:
  ports:
  - name: http
    port: 8080
    protocol: TCP
    targetPort: 8080
  selector:
    app: krm-backend
  sessionAffinity: None
  type: ClusterIP
---
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: krm-backend
  name: krm-backend
spec:
  replicas: 1
  selector:
    matchLabels:
      app: krm-backend
  strategy:
    rollingUpdate:
      maxSurge: 1
      maxUnavailable: 0
    type: RollingUpdate
  template:
    metadata:
      labels:
        app: krm-backend
    spec:
      serviceAccountName: krm-backend
      containers:
      - env:
        - name: TZ
          value: Asia/Shanghai
        - name: LANG
          value: C.UTF-8
        - name: GIN_MODE
          value: release
        - name: LOG_LEVEL
          value: info
        - name: USERNAME
          value: 21232F297A57A5A743894A0E4A801FC3    可替换,换上面的方面生成md5值
        - name: PASSWORD
          value: 21232F297A57A5A743894A0E4A801FC3
        - name: "IN_CLUSTER"
          value: "true"
        image: registry.cn-beijing.aliyuncs.com/dotbalo/krm-backend:latest
        lifecycle: {}
        livenessProbe:
          failureThreshold: 2
          initialDelaySeconds: 10
          periodSeconds: 10
          successThreshold: 1
          tcpSocket:
            port: 8080
          timeoutSeconds: 2
        name: krm-backend
        ports:
        - containerPort: 8080
          name: web
          protocol: TCP
        readinessProbe:
          failureThreshold: 2
          initialDelaySeconds: 10
          periodSeconds: 10
          successThreshold: 1
          tcpSocket:
            port: 8080
          timeoutSeconds: 2
        resources:
          limits:
            cpu: 1
            memory: 1024Mi
          requests:
            cpu: 200m
            memory: 256Mi
      restartPolicy: Always
EOF

部署前端服务

cat<<EOF | kubectl -n krm apply -f -
---
apiVersion: v1
kind: Service
metadata:
  labels:
    app: krm-frontend
  name: krm-frontend
spec:
  ports:
  - name: http
    port: 80
    protocol: TCP
    targetPort: 80
  selector:
    app: krm-frontend
  sessionAffinity: None
  type: NodePort
---
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: krm-frontend
  name: krm-frontend
spec:
  replicas: 1
  selector:
    matchLabels:
      app: krm-frontend
  strategy:
    rollingUpdate:
      maxSurge: 1
      maxUnavailable: 0
    type: RollingUpdate
  template:
    metadata:
      labels:
        app: krm-frontend
    spec:
      containers:
      - env:
        - name: TZ
          value: Asia/Shanghai
        - name: LANG
          value: C.UTF-8
        image: registry.cn-beijing.aliyuncs.com/dotbalo/krm-frontend:latest
        lifecycle: {}
        livenessProbe:
          failureThreshold: 2
          initialDelaySeconds: 10
          periodSeconds: 10
          successThreshold: 1
          tcpSocket:
            port: 80
          timeoutSeconds: 2
        name: krm-backend
        ports:
        - containerPort: 80
          name: web
          protocol: TCP
        readinessProbe:
          failureThreshold: 2
          initialDelaySeconds: 10
          periodSeconds: 10
          successThreshold: 1
          tcpSocket:
            port: 80
          timeoutSeconds: 2
        resources:
          limits:
            cpu: 1
            memory: 512Mi
          requests:
            cpu: 100m
            memory: 256Mi
      restartPolicy: Always
 EOF

检查安装:

kubectl get po -n krm
kubectl get svc -n krm

krm 登录 http://192.168.1.101:32649/ krm01 krm02

用户名密码Admin admin 登录 后添加集群 krm03 krm04

将krm访问地址通过openelb组件功能访问:

# kubectl edit svc krm-frontend -n krm
将 type: NodePort 修改为 LoadBalancer
添加注解:
metadata:
  annotations:
    lb.kubesphere.io/v1alpha1: openelb
保存退出
kubectl get svc  -n krm

krm05

此时可以直接通过 http://192.168.1.73访问:

krm06 到此以上5个功能组件安装完成!

文档信息

Search

    Table of Contents