如何在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拥有这里定义的标签

这个里面主要定义,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

命名一下文件名称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

以上是通过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 <<EOF | 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}}'

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

Step 3: Start the Kubeapps Dashboard

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

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

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐