helm部署

由Helm社区维护的一个名为Artifact Hub的Web应用,旨在便于Chart的共享与分发
https://artifacthub.io

helm 客户端

安装helm文档:https://helm.sh/docs/intro/install/

github地址:https://github.com/helm/helm/releases
在这里插入图片描述

wget https://get.helm.sh/helm-v3.13.0-linux-amd64.tar.gz
tar -xf helm-v3.13.0-linux-amd64.tar.gz 
root@k8s-master01:~/yaml# cd linux-amd64/
root@k8s-master01:~/yaml/linux-amd64# ls
LICENSE  README.md  helm
root@k8s-master01:~/yaml/linux-amd64# mv helm  /usr/local/bin/
root@k8s-master01:~/yaml/linux-amd64# helm  --help 

tcpdump -i flannel.1 -nn -X tcp port 80

抓物理网卡
tcpdump -i eth0 -nn -X udp port 8472

添加仓库

root@k8s-master01:~# helm repo add bitnami https://charts.bitnami.com/bitnami
helm “bitnami” has been added to your repositories

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

root@k8s-master01:~# helm repo list
NAME URL
bitnami https://charts.bitnami.com/bitnam

helm search repo mysql #搜索本地

helm search hub mysql #搜索hub仓库

helm pull bitnami/mysql #拉取到本地

部署mysql

参考
https://artifacthub.io/packages/helm/bitnami/mysql

helm install mysql  \
            --set auth.rootPassword=MageEdu \
            --set global.storageClass=nfs-csi \
            --set architecture=replication \
            --set auth.database=wpdb \
            --set auth.username=wpuser \
            --set auth.password='magedu.com' \
            --set secondary.replicaCount=1 \
            --set auth.replicationPassword='replpass' \
            bitnami/mysql \
            -n blog
这个集群没有pv,需要创建动态pv
  Warning  FailedScheduling  2m50s (x2 over 8m6s)  default-scheduler  0/6 nodes are available: 6 pod has unbound immediate PersistentVolumeClaims. preemption: 0/6 nodes are available: 6 Preemption is not helpful for scheduling.

在用动态pv的就能成功

root@server01:~/k8s/helm# kubectl get svc -n blog 
NAME                       TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)    AGE
mysql-primary              ClusterIP   10.103.118.100   <none>        3306/TCP   5m52s
mysql-primary-headless     ClusterIP   None             <none>        3306/TCP   5m52s
mysql-secondary            ClusterIP   10.110.170.73    <none>        3306/TCP   5m52s
mysql-secondary-headless   ClusterIP   None             <none>        3306/TCP   5m52s

root@server01:~/k8s/helm# kubectl get pods -n blog 
NAME                READY   STATUS    RESTARTS   AGE
mysql-primary-0     1/1     Running   0          5m14s
mysql-secondary-0   1/1     Running   0          5m14s

root@server01:~/k8s/helm# kubectl get pvc -n blog 
NAME                     STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
data-mysql-primary-0     Bound    pvc-3ac60d48-66f3-4398-989d-3c761ae89a84   8Gi        RWO            nfs-csi        6m15s
data-mysql-secondary-0   Bound    pvc-86c8cf8c-828e-4a69-91ed-10b14972e842   8Gi        RWO            nfs-csi        6m15s

root@server01:~/k8s/helm# helm list -n blog
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
mysql blog 1 2023-10-11 20:56:56.410252673 +0800 CST deployed mysql-9.12.4 8.0

查看部署是的提示信息
helm status mysql -n blog

helm upgrade 更新 :跟helm install 一样,修改参数
helm rollback
release 回滚

更新,为mysql1主2从

helm upgrade mysql  \
            --set auth.rootPassword=MageEdu \
            --set global.storageClass=nfs-csi \
            --set architecture=replication \
            --set auth.database=wpdb \
            --set auth.username=wpuser \
            --set auth.password='magedu.com' \
            --set secondary.replicaCount=2 \
            --set auth.replicationPassword='replpass' \
            bitnami/mysql \
            -n blog
        

删除helm资源
helm uninstall mysql -n blog

pv

root@k8s-master01:~/yaml/csi# kubectl get pv 
NAME                                       CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                          STORAGECLASS   REASON   AGE
pv-nginx                                   10Gi       RWO            Delete           Bound    default/pvc-nginx                                      69m
pvc-96139087-a1fc-4165-9431-5bd3235aef23   8Gi        RWO            Delete           Bound    blog/data-mysql2-secondary-0   nfs-csi                 28m
pvc-b6bd6c95-478b-42b0-95c3-d0ea26362261   8Gi        RWO            Delete           Bound    blog/data-mysql2-primary-0     nfs-csi                 28m

在 Kubernetes 中,`kubectl get pv` 是用于获取持久卷(Persistent Volume)的命令。持久卷是用于存储数据的资源,它们可以由集群管理员或者动态存储类(Dynamic Storage Class)提供。

`kubectl get pv` 命令的输出包含以下信息:

- **NAME**:持久卷的名称。
- **CAPACITY**:持久卷的容量。
- **ACCESS MODES**:持久卷的访问模式(例如:ReadWriteOnce,ReadOnlyMany,等等)。这些模式描述了持久卷可以被挂载和访问的方式。
- **RECLAIM POLICY**:持久卷的回收策略。这决定了当持久卷不再使用时的处理方式(例如:Retain,Delete,等等)。
- **STATUS**:持久卷的当前状态(例如:Available,Bound,Released,等等)。
- **CLAIM**:如果有的话,表示当前使用该持久卷的声明(即 PVC 名称)。
- **STORAGECLASS**:持久卷所属的存储类。存储类决定了根据需求创建持久卷时使用的存储方案。
- **REASON**:如果有的话,表示当前持久卷的状态改变的原因。

在 Kubernetes 中,持久卷声明(Persistent Volume Claim,PVC)是用于请求持久卷(Persistent Volume,PV)的抽象。PVC 定义了对存储资源的需求,并且负责在 PV 上绑定和释放卷。

每个 PV 都有一个回收策略(Retain、Delete、Recycle)。回收策略决定了当 PVC 与 PV 解绑时,系统对持久卷的处理方式。以下是回收策略的详解:
1. **Retain**(保留):当 PVC 与 PV 解绑时,持久卷不会被删除,而是被保留。需要手动处理保留的持久卷,例如手动删除或重新绑定到其他 PVC 上。这个回收策略适合于需要长期保留数据的情况。

2. **Delete**(删除):当 PVC 与 PV 解绑时(删除pvc后,pc会自动删除),持久卷会被立即删除。所有存储在该卷中的数据也将被永久删除。这个回收策略适合于需要每次解绑时删除数据的情况。

3. **Recycle**(回收):在 Kubernetes 1.14 版本之前已经废弃,不推荐使用。此策略在 PVC 与 PV 解绑时,会尝试删除卷中的数据,然后重新准备该卷供其他 PVC 使用。然而,这种回收方式并不可靠,并且依赖于存储提供商的实现。

请注意,回收策略是在 PV 创建时指定的,PVC 不能修改这个设置。因此,在创建 PV 时应谨慎选择回收策略,以确保符合数据保留和安全性要求。

部署wordpress

helm install wordpress                 --set mariadb.enabled=false                 --set externalDatabase.host=mysql-primary.blog.svc.cluster.local                 --set externalDatabase.user=wpuser                 --set externalDatabase.password='luohw.com'                 --set externalDatabase.database=wpdb                 --set externalDatabase.port=3306                 --set persistence.storageClass=nfs-csi                 --set ingress.enabled=true                 --set ingress.ingressClassName=nginx                 --set ingress.hostname=blog.magedu.com                 --set ingress.pathType=Prefix                 --set wordpressUsername=admin                 --set wordpressPassword='luohw.com'                 bitnami/wordpress                 -n blog

查看

root@k8s-master01:~/helm/mysql# kubectl get pods  -n blog 
NAME                         READY   STATUS    RESTARTS      AGE
mysql-primary-0              1/1     Running   0             18m
mysql-secondary-0            1/1     Running   1 (16m ago)   18m
wordpress-7fbfc75469-bxsp6   1/1     Running   0             14m

root@k8s-master01:~/helm/mysql#  kubectl get svc -n blog 
NAME                       TYPE           CLUSTER-IP       EXTERNAL-IP   PORT(S)                      AGE
mysql-primary              ClusterIP      10.100.245.69    <none>        3306/TCP                     17m
mysql-primary-headless     ClusterIP      None             <none>        3306/TCP                     17m
mysql-secondary            ClusterIP      10.108.118.144   <none>        3306/TCP                     17m
mysql-secondary-headless   ClusterIP      None             <none>        3306/TCP                     17m
wordpress                  LoadBalancer   10.104.146.103   <pending>     80:30169/TCP,443:32382/TCP   13m



root@k8s-master01:~/helm/mysql# kubectl get pvc -n blog 
NAME                     STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
data-mysql-primary-0     Bound    pvc-46316af9-fe4f-44be-9118-44676a248e55   8Gi        RWO            nfs-csi        26m
data-mysql-secondary-0   Bound    pvc-f97e9692-fd20-4c62-8374-8747da886305   8Gi        RWO            nfs-csi        26m
wordpress                Bound    pvc-941b05b3-ff6a-42c6-afd6-007fde9fd6c5   10Gi       RWO            nfs-csi        22m


windows 添加hosts解析,登录
在这里插入图片描述
访问http://blog.magedu.com/admin登录
在这里插入图片描述
在这里插入图片描述

删除
helm uninstall wordpress -n blog

部署habor

添加仓库
helm repo add harbor https://helm.goharbor.io

helm show values harbor/harbor

创建命名空间
kubectl create ns harbor

cd learning-k8s/helm-examples/harbor

helm install harbor -f ./harbor-values.yaml harbor/harbor -n harbor

cat harbor-values2.yaml 
expose:
  type: nodePort #如何公开服务:ingress、clusterIP、nodePort或loadBalancer,其他值将被忽略并跳过服务的创建
  tls:
    enabled: true  
    certSource: auto
    auto:
      commonName: luo    #用于生成证书的通用名称,当类型不是ingress时需要此名称
  ingress:
    hosts:
      core: hub.magedu.com
      notary: notary.magedu.com
    controller: default
    annotations: 
      kubernetes.io/ingress.class: "nginx"

ipFamily:
  ipv4:
    enabled: true
  ipv6:
    enabled: false
 

externalURL: https://registry.magedu.com

# 持久化存储配置部分
persistence:
  enabled: true 
  resourcePolicy: "keep"
  persistentVolumeClaim:        # 定义Harbor各个组件的PVC持久卷
    registry:          # registry组件(持久卷)
      storageClass: "nfs-csi"           # 前面创建的StorageClass,其它组件同样配置
      accessMode: ReadWriteMany          # 卷的访问模式,需要修改为ReadWriteMany
      size: 5Gi
    chartmuseum:     # chartmuseum组件(持久卷)
      storageClass: "nfs-csi"
      accessMode: ReadWriteMany
      size: 5Gi
    jobservice:
      jobLog:
        storageClass: "nfs-csi"
        accessMode: ReadWriteOnce
        size: 1Gi
      #scanDataExports:
      #  storageClass: "nfs-csi"
      #  accessMode: ReadWriteOnce
      #  size: 1Gi
    database:        # PostgreSQl数据库组件
      storageClass: "nfs-csi"
      accessMode: ReadWriteMany
      size: 2Gi
    redis:    # Redis缓存组件
      storageClass: "nfs-csi"
      accessMode: ReadWriteMany
      size: 2Gi
    trivy:         # Trity漏洞扫描
      storageClass: "nfs-csi"
      accessMode: ReadWriteMany
      size: 5Gi

harborAdminPassword: "abcdeg"

部署 helm install harbor -f ./harbor-values2.yaml harbor/harbor -n harbor
当yaml文件发生变化是使用helm upgrade 更新
helm upgrade harbor -f ./harbor-values2.yaml harbor/harbor -n harbor

root@server01:~/k8s/helm/learning-k8s/helm-examples/harbor# kubectl get svc -n harbor 
NAME                TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                      AGE
harbor              NodePort    10.97.35.42      <none>        80:30002/TCP,443:30003/TCP   90s
harbor-core         ClusterIP   10.103.174.220   <none>        80/TCP                       101m
harbor-database     ClusterIP   10.99.144.75     <none>        5432/TCP                     101m
harbor-jobservice   ClusterIP   10.104.223.72    <none>        80/TCP                       101m
harbor-portal       ClusterIP   10.97.69.255     <none>        80/TCP                       101m
harbor-redis        ClusterIP   10.105.195.236   <none>        6379/TCP                     101m
harbor-registry     ClusterIP   10.104.241.84    <none>        5000/TCP,8080/TCP            101m
harbor-trivy        ClusterIP   10.98.77.181     <none>        8080/TCP                     101m

通过节点ip+nodeport访问
https://IP:30003/
在这里插入图片描述

删除

helm delete harbor -n harbor

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值