资讯详情

kubesphere+kubernetes搭建生产环境高可用集群(四-1)

k8s中间件的常用部署

Centos7安装部署nginx

参考链接

nginx官网地址:https://nginx.org/en/download.html

rpm选择包操作系统版本的地址:http://nginx.org/packages/

rpm包centos7操作系统官方下载地址:http://nginx.org/packages/centos/7/x86_64/RPMS/

这里根据官网提供的主线版本自行到达rpm选择下载包连接地址

[外链图片存储失败,源站可能有防盗链机制,建议保存图片直接上传(img-IsSMJWM9-1656494597434)(./images/nginx_1.jpg)]

部署步骤

#下载rpm这里选择最新的官方稳定版1.20.2 [root@nginx-0 ~]# wget http://nginx.org/packages/centos/7/x86_64/RPMS/nginx-1.20.2-1.el7.ngx.x86_64.rpm #安装 [root@nginx-0 ~]# rpm -ivh nginx-1.20.2-1.el7.ngx.x86_64.rpm warning: nginx-1.20.2-1.el7.ngx.x86_64.rpm: Header V4 RSA/SHA1 Signature, key ID 7bd9bf62: NOKEY Preparing...                          ################################# [100%] Updating / installing...    1:nginx-1:1.20.2-1.el7.ngx         ######################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################## [100%] #检查已安装的nginx [root@nginx-0 ~]# rpm -qa | grep nginx nginx-1.20.2-1.el7.ngx.x86_64 #更需要修改/#etc/nginx/nginx.conf(主要用于自定义nginx各种服务器配置等。 [root@nginx-0 ~]# vi /etc/nginx/nginx.conf 示例配置见附录 #更需要修改/#etc/nginx/conf.d/***.conf(主要用于自定义nginx各种转发规则等) [root@nginx-0 ~]# vi /etc/nginx/conf.d/***.conf 示例配置见附录 [root@nginx-0 ~]#  #检测nginx配置文件 [root@nginx-0 ~]# nginx -t #启动nginx,并配置启动自启动 [root@nginx-0 ~]# systemctl start nginx && systemctl enable nginx #热加载配置文件nginx -t检测配置文件无误) [root@nginx-0 ~]# nginx -s reload 

k8s部署mysql5.7

部署步骤

创建mysql相关部署文件

  1. 创建mysql存储pvc yaml文件
[root@k8s-master-0 ~]# vi mysql-pvc.yaml 
  • mysql-pv.yaml
kind: PersistentVolumeClaim apiVersion: v1 metadata:   name: mysql-pvc   namespace: test           #注意修改命名空间 spec:   accessModes:     - ReadWriteOnce   resources:     requests:       storage: 10Gi   storageClassName: glusterfs
  1. 创建mysql配置configmap yaml文件
[root@k8s-master-0 ~]# vi mysql-config.yaml
  • mysql-config.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: mysql-cm
  namespace: test											#注意修改命名空间
data:
  mysqld.cnf: | [mysqld] pid-file = /var/run/mysqld/mysqld.pid socket = /var/run/mysqld/mysqld.sock datadir = /var/lib/mysql bind-address = 0.0.0.0 port = 3306 log-bin = mysql-bin server-id = 1
  1. 创建mysql服务service yaml文件
[root@k8s-master-0 ~]# vi mysql-service.yaml
  • mysql-service.yaml
apiVersion: v1
kind: Service
metadata:
  name: mysql
  namespace: test											#注意修改命名空间
spec:
  type: NodePort
  ports:
  - port: 3306
    targetPort: 3306
    nodePort: 30850
  selector:
    app: mysql
  1. 创建mysql配置副本Deployment yaml文件
[root@k8s-master-0 ~]# vi mysql.yaml
  • mysql.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: mysql
  namespace: test													#注意修改命名空间
spec:
  selector:
    matchLabels:
      app: mysql
  template:
    metadata:
      labels:
        app: mysql
    spec:
      containers:
      - name: mysql
        image: mysql:5.7.32
        env:
        - name: MYSQL_ROOT_PASSWORD
          value: "root@my.123" 										#数据库root的密码
        ports:
        - containerPort: 3306
        volumeMounts:
        - name: mysql-persistent-storage
          mountPath: /var/lib/mysql
        volumeMounts:
        - name: mysql-config
          mountPath: /etc/mysql/mysql.conf.d/mysqld.cnf
          subPath: mysqld.cnf
      volumes:
      - name: mysql-persistent-storage
        persistentVolumeClaim:
          claimName: mysql-pvc
      - name: mysql-config
        configMap:
          name: mysql-cm

部署mysql

[root@k8s-master01 ~]# kubectl apply -f mysql-pvc.yaml
[root@k8s-master01 ~]# kubectl apply -f mysql-config.yaml
[root@k8s-master01 ~]# kubectl apply -f mysql-service.yaml
[root@k8s-master01 ~]# kubectl apply -f mysql.yaml

验证mysql

NAME                     READY   STATUS    RESTARTS   AGE
mysql-589dcf6597-5ps6x   1/1     Running   0          8m3s
#进入pod登录验证
[root@k8s-master01 ~]# kubectl exec -it mysql-589dcf6597-5ps6x /bin/bash -n test
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
root@mysql-589dcf6597-5ps6x:/# mysql -u root -p
Enter password:

mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'P@ssword-123';		#修改root密码
Query OK, 0 rows affected (0.00 sec)

k8s部署nacos集群

参考链接

部署参考:https://github.com/nacos-group/nacos-k8s

sql文件参考:https://github.com/alibaba/nacos/blob/develop/distribution/conf/nacos-mysql.sql

部署步骤

拉取项目代码

#拉取nacos代码,见附录
[root@k8s-master-0 ~]# git clone https://github.com/nacos-group/nacos-k8s.git
#拉取nacos的初始化数据库sql文件,见附录
[root@k8s-master-0 ~]# https://github.com/alibaba/nacos/blob/develop/distribution/conf/nacos-mysql.sql

创建nacos所需数据库

#登录数据库
[root@k8s-master01 mysql]# kubectl exec -it mysql-589dcf6597-5ps6x /bin/bash -n test
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
root@mysql-589dcf6597-5ps6x:/# mysql -u root -p
Enter password:
#创建数据库
mysql> CREATE DATABASE  IF NOT EXISTS `nacos_dev` DEFAULT CHARACTER SET utf8mb4 DEFAULT COLLATE utf8mb4_unicode_ci;
#创建nacos用户
mysql> GRANT ALL PRIVILEGES ON  nacos.* to nacos@'%' IDENTIFIED BY 'nacos';
#刷新权限
mysql> FLUSH PRIVILEGES;
#导入nacos数据库
mysql> use nacos;
Database changed

#查看mysql的连接端口
[root@k8s-master01 mysql]# kubectl get svc -n test
NAME                                                     TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
mysql                                                    NodePort    10.233.20.110   <none>        3306:30850/TCP   47m
#使用mysql连接工具连接数据库并导入上方sql,因为mysql service的类型为nodeport,所以连接地址为任一k8s集群的节点ip地址,端口为30850

#回到命令行查看nacos数据表
mysql> show tables;
+----------------------+
| Tables_in_nacos      |
+----------------------+
| config_info          |
| config_info_aggr     |
| config_info_beta     |
| config_info_tag      |
| config_tags_relation |
| group_capacity       |
| his_config_info      |
| permissions          |
| roles                |
| tenant_capacity      |
| tenant_info          |
| users                |
+----------------------+
12 rows in set (0.00 sec)

修改nacos部署yaml文件

#进入项目目录
[root@k8s-master-0 ~]# cd nacos-k8s/deploy/nacos
[root@k8s-master-0 ~]# mv nacos-pvc-nfs.yaml nacos.yaml
#修改部署文件
[root@k8s-master-0 nacos]# vi nacos.yaml
  • nacos.yaml
---											#修改8848端口为nodeport形式,以便集群外部访问
apiVersion: v1
kind: Service
metadata:
  name: nacos-server
  namespace: test							#增加命名空间
  labels:
    app: nacos
  annotations:
    service.alpha.kubernetes.io/tolerate-unready-endpoints: "true"
spec:
  type: NodePort
  ports:
    - port: 8848
      name: server
      targetPort: 8848
      nodePort: 30848
  selector:
    app: nacos
---
apiVersion: v1
kind: Service
metadata:
  name: nacos-headless
  namespace: test							#增加命名空间
  labels:
    app: nacos
  annotations:
    service.alpha.kubernetes.io/tolerate-unready-endpoints: "true"
spec:
  ports:
    - port: 8848
      name: server
      targetPort: 8848
    - port: 9848
      name: client-rpc
      targetPort: 9848
    - port: 9849
      name: raft-rpc
      targetPort: 9849
    ## 兼容1.4.x版本的选举端口
    - port: 7848
      name: old-raft-rpc
      targetPort: 7848
  clusterIP: None
  selector:
    app: nacos
---
apiVersion: v1
kind: ConfigMap
metadata:
  name: nacos-cm
  namespace: test							#增加命名空间
data:
  mysql.host: "mysql.test.svc.cluster.local"						#增加mysql连接地址
  mysql.db.name: "nacos_devtest"
  mysql.port: "3306"
  mysql.user: "nacos"
  mysql.password: "nacos"
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: nacos
  namespace: test							#增加命名空间
spec:
  serviceName: nacos-headless
  replicas: 3
  template:
    metadata:
      labels:
        app: nacos
      annotations:
        pod.alpha.kubernetes.io/initialized: "true"
    spec:
      affinity:
        podAntiAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            - labelSelector:
                matchExpressions:
                  - key: "app"
                    operator: In
                    values:
                      - nacos
              topologyKey: "kubernetes.io/hostname"
      serviceAccountName: nfs-client-provisioner
      initContainers:
        - name: peer-finder-plugin-install
          image: nacos/nacos-peer-finder-plugin:1.1
          imagePullPolicy: Always
          volumeMounts:
            - mountPath: /home/nacos/plugins/peer-finder
              name: data
              subPath: peer-finder
      containers:
        - name: nacos
          imagePullPolicy: Always
          image: nacos/nacos-server:latest
          resources:
            requests:
              memory: "2Gi"
              cpu: "500m"
          ports:
            - containerPort: 8848
              name: client-port
            - containerPort: 9848
              name: client-rpc
            - containerPort: 9849
              name: raft-rpc
            - containerPort: 7848
              name: old-raft-rpc
          env:
            - name: NACOS_REPLICAS
              value: "3"
            - name: SERVICE_NAME
              value: "nacos-headless"
            - name: DOMAIN_NAME
              value: "cluster.local"						#修改k8s集群地址,可通过cat /etc/kubernetes/kubelet.conf查看对应字段:contexts/- context/cluster
            - name: POD_NAMESPACE
              valueFrom:
                fieldRef:
                  apiVersion: v1
                  fieldPath: metadata.namespace
            - name: MYSQL_SERVICE_HOST						#增加获取mysql连接地址的环境变量
              valueFrom:
                configMapKeyRef:
                  name: nacos-cm
                  key: mysql.host
            - name: MYSQL_SERVICE_DB_NAME
              valueFrom:
                configMapKeyRef:
                  name: nacos-cm
                  key: mysql.db.name
            - name: MYSQL_SERVICE_PORT
              valueFrom:
                configMapKeyRef:
                  name: nacos-cm
                  key: mysql.port
            - name: MYSQL_SERVICE_USER
              valueFrom:
                configMapKeyRef:
                  name: nacos-cm
                  key: mysql.user
            - name: MYSQL_SERVICE_PASSWORD
              valueFrom:
                configMapKeyRef:
                  name: nacos-cm
                  key: mysql.password
            - name: NACOS_SERVER_PORT
              value: "8848"
            - name: NACOS_APPLICATION_PORT
              value: "8848"
            - name: PREFER_HOST_MODE
              value: "hostname"
          volumeMounts:
            - name: data
              mountPath: /home/nacos/plugins/peer-finder
              subPath: peer-finder
            - name: data
              mountPath: /home/nacos/data
              subPath: data
            - name: data
              mountPath: /home/nacos/logs
              subPath: logs
  volumeClaimTemplates:
    - metadata:
        name: data
        namespace: test								#增加命名空间
        annotations:
          volume.beta.kubernetes.io/storage-class: "managed-nfs-storage"
      spec:
        accessModes: [ "ReadWriteMany" ]
        storageClassName: "glusterfs"					#增加storageClass选择器,以便自动创建pvc
        resources:
          requests:
            storage: 20Gi
  selector:
    matchLabels:
      app: nacos

部署集群

[root@k8s-master-0 ~]# kubectl apply -f nacos.yaml

验证集群

#查看nacos pod
[root@k8s-master-0 ~]# kubectl get pod -n test | grep nacos
nacos-0                                               1/1     Running   0          120d
nacos-1                                               1/1     Running   0          120d
nacos-2                                               1/1     Running   0          120d
#查看nacos svc
[root@k8s-master01 ~]# kubectl get svc -n test | grep nacos
NAME                               TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)                               AGE
nacos-headless                     ClusterIP   None            <none>        8848/TCP,9848/TCP,9849/TCP,7848/TCP   216d
nacos-server                       NodePort    10.233.20.35    <none>        8848:30848/TCP                        213d
#访问任意节点ip+30848(nodeport端口)进行验证

k8s安装redis三主三从集群

部署步骤

创建redis副本文件

[root@k8s-master-0 ~]# vi redis-statefulset.yaml
  • redis-statefulset.yaml
---
apiVersion: v1
kind: ConfigMap
metadata:
  name: redis-cluster-cm
  namespace: test
data:
  redis-conf: | appendonly yes #开启AOF模式 protected-mode no #关闭protected-mode模式,此时外部网络可以直接访问 cluster-enabled yes #开启集群模式 cluster-config-file /data/nodes.conf #Redis集群节点的集群配置文件 cluster-node-timeout 5000 #指节点在失败状态下必须不可到达的毫秒数。大多数其他内部时间限制是节点超时的倍数 dir /data #数据存储目录 port 6379 requirepass redis@123.com #redis密码,自定义 masterauth redis@123.com #如果master是密码保护的,在启动复制同步进程之前,可以告诉奴隶进行身份验证,否则主人将拒绝奴隶请求。
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: redis
  namespace: szxc
  labels:
    app: redis
spec:
  serviceName: redis-headless
  replicas: 6
  selector:
    matchLabels:
      app: redis
  template:
    metadata:
      labels:
        app: redis
    spec:
      affinity:
        podAntiAffinity:
          preferredDuringSchedulingIgnoredDuringExecution:
          - weight: 100
            podAffinityTerm:
              labelSelector:
                matchExpressions:
                - key: app
                  operator: In
                  values:
                  - redis
              topologyKey: kubernetes.io/hostname
      containers:
      - name: redis
        image: redis:6.2.5
        command:
          - "redis-server"
        args:
          - "/etc/redis/redis.conf"
          - "--protected-mode"
          - "no"
          - "--cluster-announce-ip"
          - "$(POD_IP)"
        env:
          - name: POD_IP
            valueFrom:
              fieldRef:
                fieldPath: status.podIP
        ports:
            - name: redis
              containerPort: 6379
              protocol: "TCP"
            - name: cluster
              containerPort: 16379
              protocol: "TCP"
        volumeMounts:
          - name: redis-conf
            mountPath: /etc/redis        
          - name: redis-data
            mountPath: /data
      volumes:
      - name: redis-conf
        configMap:
          name: redis-cluster-cm
          items:
            - key: redis-conf
              path: redis.conf
  volumeClaimTemplates:
    - metadata:
        name: redis-data
        namespace: test
      spec:
        accessModes: [ "ReadWriteOnce" ]
        storageClassName: "glusterfs"										#注意修改为自己的storageClass
        resources:
          requests:
            storage: 10Gi													#pvc容量,自定义

---
apiVersion: v1
kind: Service
metadata:
  name: redis-headless
  namespace: test
  labels:
    app: redis
spec:
  type: NodePort
  ports:
    - name: redis-port
      port: 6379
      targetPort: 6379
      nodePort: 30849														#nodeport端口自定义
  selector:
    app: redis

部署并配置集群

#部署
[root@k8s-master-0 ~]# kubectl apply -f redis-statefulset.yaml
#配置集群
#自动配置3个master,3个slave节点的集群,-a指定密码
[root@k8s-master-0 ~]# kubectl exec -it redis-0 -n test -- redis-cli -a redis@123.com --cluster create --cluster-replicas 1 $(kubectl get pods -n test -l app=redis -o jsonpath='{range.items[*]}{.status.podIP}:6379 {end}')

验证集群

#对redis集群进行验证
[root@k8s-master-0 ~]# kubectl exec -it redis-0 -n test -- redis-cli -a redis@123.com --cluster check $(kubectl get pods -n test -l app=redis -o jsonpath='{range.items[0]}{.status.podIP}:6379{end}')
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
10.233.67.76:6379 (b8e966ed...) -> 286 keys | 5461 slots | 1 slaves.
10.233.94.207:6379 (31d925a7...) -> 263 keys | 5462 slots | 1 slaves.
10.233.98.106:6379 (11b42330...) -> 275 keys | 5461 slots | 1 slaves.
[OK] 824 keys in 3 masters.
0.05 keys per slot on average.
>>> Performing Cluster Check (using node 10.233.67.76:6379)
M: b8e966ed2e00d2c9fb24ebdd409fd7eef90cbb11 10.233.67.76:6379
   slots:[0-5460] (5461 slots) master
   1 additional replica
        标签: 56asc532连接器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台