通过编写yaml文件,执行kubectl apply -f 可以安装软件
编写yaml的时候注意事项:
参考如下脚本(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: 1GipersistentVolumeReclaimPolicy: Recycle # 回收策略hostPath:## 绑定在node上的位置path: /data/mysql-data
---
## 定义mysql的pvc,同时申领资源
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: mysql-pv namespace: default
spec:storageClassName: manualaccessModes: # PVC也需要定义访问模式,不过它的模式一定是和现有PV相同或者是它的子集,否则匹配不到PV- ReadWriteOnceresources: # 定义资源要求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的Selectorspec:containers: # Pod的内容的定义部分- name: mysql-pvc # 容器的名称image: mysql # 容器对应的Docker Imageports:- containerPort: 3306 # 容器应用监听的端口号env:- name: MYSQL_ROOT_PASSWORD # 设置mysql的初始化密码value: "123456" # 设置mysql的初始化密码volumeMounts:- name: mysql-datamountPath: /var/lib/mysqlvolumes:- name: mysql-datapersistentVolumeClaim: #引用的模式claimName: mysql-pv #引用到的pvc动态创建的名字
---
apiVersion: v1
kind: Service # 表明是Kubernetes Service
metadata:name: mysql-pvc # Service 的全局唯一名称
spec:type: NodePortselector:app: mysql-pvcports: # Service 提供服务的端口- port: 3306 # Service 对应的Pod拥有这里定义的标签
这个里面主要定义,PV、PVC、Deployment、Service等信息,主要说明安装mysql、安装mysql的位置、配置及端口,通过执行kubectl apply -f mysql-pvc.yaml安装mysql。
写脚本实际上对我们来说还是有一定的门槛的,而且这个试错成本也比较高。为此我找到了这个网站https://www.kubebiz.com/。这里面有很多软件,这个网站为大部分软件都直接创建好了脚本,可以直接使用的。
https://www.kubebiz.com/进入

apiVersion: apps/v1
kind: Deployment
metadata:name: my-mysqlnamespace: my-space
spec:replicas: 1selector:matchLabels:app: my-mysqltemplate:metadata:labels:app: my-mysqlspec:containers:- name: my-mysqlimage: "mysql:8.0.30"imagePullPolicy: IfNotPresentenv:- name: MYSQL_ROOT_PASSWORDvalue: root- name: MYSQL_USERvalue: test- name: MYSQL_PASSWORDvalue: testports:- containerPort: 3306protocol: TCPname: httpvolumeMounts:- name: my-mysql-datamountPath: /var/lib/mysql- name: mysql-confmountPath: /etc/mysql/mysql.conf.dvolumes:- name: mysql-confconfigMap:name: mysql-conf- name: my-mysql-datapersistentVolumeClaim:claimName: my-mysql-data
---
apiVersion: v1
kind: ConfigMap
metadata:name: mysql-confnamespace: my-space
data:mysql.cnf: |[mysqld]pid-file = /var/run/mysqld/mysqld.pidsocket = /var/run/mysqld/mysqld.sockdatadir = /var/lib/mysqlsymbolic-links=0sql-mode=ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
---
apiVersion: v1
kind: Service
metadata:name: mysql-exportnamespace: my-space
spec:type: NodePortselector:app: my-mysqlports:- port: 3306targetPort: 3306nodePort: 32306
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: my-mysql-datanamespace: my-space
spec:accessModes:- ReadWriteManyresources:requests:storage: 5Gi
命名一下文件名称mysql-kube.yaml,然后执行kubectl apply -f mysql-kube.yaml,之后在kubernetes中查看是否创建成功。
kubeapps是一个kubernetes端的应用商店,但是首先要安装kubeapps到k8s中,然后通过kubeapps安装软件,我直接把如何安装kubeapps在下面描述一下,具体如何安装软件,可以到平台里面查看,这个就不细说了,类似安装应用一样。
下面是通过访问主页获取的安装信息
Step 1: Install Kubeapps (for demo purposes)
helm repo add bitnami https://charts.bitnami.com/bitnamihelm 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-operatorkubectl create clusterrolebinding kubeapps-operator --clusterrole=cluster-admin --serviceaccount=default:kubeapps-operatorcat <{.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应用商店,就可以安装应用了。