• K8S实战 - 如何在kubernetes中安装软件


    如何在kubernetes中安装软件

    1、编写脚本安装

    通过编写yaml文件,执行kubectl apply -f 可以安装软件
    编写yaml的时候注意事项:

    1. pod的类型(deployment、statefulset等)
    2. 端口的定义(service)
    3. 配置文件的定义(configmap、secret)
    4. 存储的定义(host、PVC)
    5. ingress的定义,微服务需要用到

    参考如下脚本(mysql-pvc.yaml mysql安装脚本):

    ## 定义PV
    apiVersion: v1
    kind: PersistentVolume
    metadata: # PV建立不要加名称空间,因为PV属于集群级别的
      name: mysql-pv # PV名称
    spec: # 这里的spec和volumes里面的一样
      storageClassName: manual # 类的名称
      accessModes: # 用于定义资源的访问方式
        - ReadWriteOnce # 可读可写
      capacity: # 设置存储空间大小
        storage: 1Gi
      persistentVolumeReclaimPolicy: Recycle # 回收策略
      hostPath:
        ## 绑定在node上的位置
        path: /data/mysql-data
    ---
    ## 定义mysql的pvc,同时申领资源
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: mysql-pv   
      namespace: default
    spec:
      storageClassName: manual
      accessModes: # PVC也需要定义访问模式,不过它的模式一定是和现有PV相同或者是它的子集,否则匹配不到PV
        - ReadWriteOnce
      resources: # 定义资源要求PV满足这个PVC的要求才会被匹配到
        requests:
          storage: 1Gi # 定义要求有多大空间
    ---
    ## 定义创建mysql并部署
    apiVersion: apps/v1
    kind: Deployment # 副本控制器RC
    metadata:
      name: mysql-pvc #RC 的名称,全局唯一
      namespace: default # 默认空间
    spec:
      replicas: 1 #Pod 副本的期待数量
      selector:
        matchLabels:
          app: mysql-pvc # 符合目标的Pod拥有此标签
      template: # 根据此模版创建Pod的副本
        metadata:
          labels:
            app: mysql-pvc # Pod副本拥有的标签,对应RC的Selector
        spec:
          containers: # Pod的内容的定义部分
            - name: mysql-pvc # 容器的名称
              image: mysql # 容器对应的Docker Image
              ports:
                - containerPort: 3306 # 容器应用监听的端口号
              env:
                - name: MYSQL_ROOT_PASSWORD # 设置mysql的初始化密码
                  value: "123456" # 设置mysql的初始化密码
              volumeMounts:
                - name: mysql-data
                  mountPath: /var/lib/mysql
          volumes:
            - name: mysql-data
              persistentVolumeClaim: #引用的模式
                claimName: mysql-pv #引用到的pvc动态创建的名字
    ---
    apiVersion: v1
    kind: Service # 表明是Kubernetes Service
    metadata:
      name: mysql-pvc # Service 的全局唯一名称
    spec:
      type: NodePort
      selector:
        app: mysql-pvc
      ports: # Service 提供服务的端口
        - port: 3306 # Service 对应的Pod拥有这里定义的标签
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72

    这个里面主要定义,PV、PVC、Deployment、Service等信息,主要说明安装mysql、安装mysql的位置、配置及端口,通过执行kubectl apply -f mysql-pvc.yaml安装mysql。

    2、通过kubebiz安装软件

    写脚本实际上对我们来说还是有一定的门槛的,而且这个试错成本也比较高。为此我找到了这个网站https://www.kubebiz.com/。这里面有很多软件,这个网站为大部分软件都直接创建好了脚本,可以直接使用的。

    1. 输入网址https://www.kubebiz.com/进入
      在这里插入图片描述
      可以看到里面有很多软件信息,如mysql、mongodb、jenkins、redis等,下面还有分页显示,足足有23页,每页显示10条,记录了大部分使用的软件,右边有搜索栏可以进行搜索。
    2. 点击进入mysql查看配置信息
      在这里插入图片描述
      以上点击mysql进入的页面,在这个网页上面,可以选择kubernetes的版本,查看脚本内容。
    3. 执行脚本
      我们copy出来mysql的执行脚本,可以把脚本都粘贴到一起,然后在脚本上修改一下,比如:namesapce、nodeport等等一些信息。
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: my-mysql
      namespace: my-space
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: my-mysql
      template:
        metadata:
          labels:
            app: my-mysql
        spec:
          containers:
            - name: my-mysql
              image: "mysql:8.0.30"
              imagePullPolicy: IfNotPresent
              env:
                - name: MYSQL_ROOT_PASSWORD
                  value: root
                - name: MYSQL_USER
                  value: test
                - name: MYSQL_PASSWORD
                  value: test
              ports:
                - containerPort: 3306
                  protocol: TCP
                  name: http
              volumeMounts:
                - name: my-mysql-data
                  mountPath: /var/lib/mysql
                - name: mysql-conf
                  mountPath: /etc/mysql/mysql.conf.d
          volumes:
            - name: mysql-conf
              configMap:
                name: mysql-conf
            - name: my-mysql-data
              persistentVolumeClaim:
                claimName: my-mysql-data
    ---
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: mysql-conf
      namespace: my-space
    data:
      mysql.cnf: |
        [mysqld]
    
         pid-file        = /var/run/mysqld/mysqld.pid
         socket          = /var/run/mysqld/mysqld.sock
         datadir         = /var/lib/mysql
         
         symbolic-links=0
         sql-mode=ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: mysql-export
      namespace: my-space
    spec:
      type: NodePort
      selector:
        app: my-mysql
      ports:
        - port: 3306
          targetPort: 3306
          nodePort: 32306
    ---
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: my-mysql-data
      namespace: my-space
    spec:
      accessModes:
        - ReadWriteMany
      resources:
        requests:
          storage: 5Gi
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84

    命名一下文件名称mysql-kube.yaml,然后执行kubectl apply -f mysql-kube.yaml,之后在kubernetes中查看是否创建成功。

    3、通过kubeapp安装软件

    kubeapps是一个kubernetes端的应用商店,但是首先要安装kubeapps到k8s中,然后通过kubeapps安装软件,我直接把如何安装kubeapps在下面描述一下,具体如何安装软件,可以到平台里面查看,这个就不细说了,类似安装应用一样。

    下面是通过访问主页获取的安装信息

    Step 1: Install Kubeapps (for demo purposes)

      helm repo add bitnami https://charts.bitnami.com/bitnami
      helm install -n kubeapps --create-namespace kubeapps bitnami/kubeapps
    
    • 1
    • 2

    以上是通过helm安装kubeapps,首先添加源信息,然后开始安装kubeapps

    Step 2: Create a demo credential with which to access Kubeapps and Kubernetes

      kubectl create --namespace default serviceaccount kubeapps-operator
      kubectl create clusterrolebinding kubeapps-operator --clusterrole=cluster-admin --serviceaccount=default:kubeapps-operator
    
      cat <| kubectl apply -f -
      apiVersion: v1
      kind: Secret
      metadata:
        name: kubeapps-operator-token
        namespace: default
        annotations:
          kubernetes.io/service-account.name: kubeapps-operator
      type: kubernetes.io/service-account-token
      EOF
        
      kubectl get --namespace default secret kubeapps-operator-token -o go-template='{{.data.token | base64decode}}'
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    安装好之后创建serviceaccount,执行加密配置存储token信息,然后通过 kubectl get获取token登录

    Step 3: Start the Kubeapps Dashboard

      kubectl port-forward -n kubeapps svc/kubeapps 8080:80
    
    • 1

    通过port-forward可以映射外部访问端口8080,然后在浏览器输入http://localhost:8080进入Kubeapps控制台登陆页,然后输入token信息就可以直接登录Kubeapps应用商店,就可以安装应用了。

  • 相关阅读:
    服务网格安全防护
    java计算机毕业设计网上花店源码+系统+mysql数据库+LW文档+部署文件
    单片机---1MHz方波的产生(中断和查询方式)
    【★★★★★ 树与二叉树总结笔记 2022 9.5】
    Python编写的人工智能美颜系统
    ArcGIS pro 支持 发布三维服务
    深度学习基础之参数量(3)
    有关CSS的芝士
    c++未初始化的局部变量有巧合的初始值
    Kubernetes已然崛起,Kubernetes实战手册帮你轻松拿下
  • 原文地址:https://blog.csdn.net/exception_class/article/details/127925021