通过编写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: 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。
写脚本实际上对我们来说还是有一定的门槛的,而且这个试错成本也比较高。为此我找到了这个网站https://www.kubebiz.com/
。这里面有很多软件,这个网站为大部分软件都直接创建好了脚本,可以直接使用的。
https://www.kubebiz.com/
进入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中查看是否创建成功。
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 <| 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应用商店,就可以安装应用了。