kubernetes集群部署oracle 11g数据库服务

背景:

因业务上线需要,研发中心要求在kubernetes测试集群部署一个oracle 11g的数据库,用于业务功能调试。

一、实施部署oracle 11g数据库: 

1、拉取oracle 11g的镜像:

[root@harbor-02 ~]# docker pull registry.cn-hangzhou.aliyuncs.com/images-speed-up/oracle_11g
2017-latest: Pulling from images-speed-up/oracle_11g
699451820735: Pull complete 
861e6e6e8e5e: Pull complete 
4403d783b046: Pull complete 
Digest: sha256:3b913841850a4d57fcfcb798be86acc88ea0f2acc5478bc0c140a43e91c4a545
Status: Downloaded newer image for registry.cn-hangzhou.aliyuncs.com/images-speed-up/oracle_11g:latest

2、上传postgre 12.6镜像到私库:

先tag处理一下

[root@harbor-02 ~]# docker tag registry.cn-hangzhou.aliyuncs.com/images-speed-up/oracle_11g dockerhub.jiang.com/jiang-public/oracle:iatebes-11g

再上传到私有harbor库

[root@harbor-02 ~]# docker push dockerhub.jiang.com/jiang-public/oracle:iatebes-11g
The push refers to repository [dockerhub.jiang.com/jiang-public/oracle]
fdfec26b634f: Pushed 
ef3ecb9d5e46: Pushed 
548a79621a42: Pushed 
2017-latest: digest: sha256:ff8a63a2c900cf3201b9485267ff804db58fbeaed83287c94edd3b3359708854 size: 954

3、创建PersistentVolume、PersistentVolumeClaim存储:

因kubernetes集群环境是对接了hpe(华三)的iscsi存储,所以直接通过stoageclass创建pvc存储即可。不过这里会展示pvc存储的yml配置内容。

pvc存储yml配置:

apiVersion: storage.k8s.io/v1
kind: PersistentVolumeClaim
metadata:
  name: oracle-11g-pvc
  namespace: main-data-test
  annotations:
    boundinfo: >-
      [{"podName":"oracle-db-zmbuy-75f497f78d-gdjr5","containerName":"oracle","volumeMount":{"name":"oracle-11g-pvc","mountPath":"/opt/oracle/app/oradata/"}}]
    pv.kubernetes.io/bind-completed: 'yes'
    pv.kubernetes.io/bound-by-controller: 'yes'
    system/support-expansion: 'true'
    volume.beta.kubernetes.io/storage-provisioner: csi.hpe.com
  finalizers:
    - kubernetes.io/pvc-protection
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 10Gi
  volumeName: pvc-284a18aa-e560-44fb-8fa2-a19854b657bf
  storageClassName: hpe-san
  volumeMode: Filesystem

4、创建无状态的postgre数据库:

这里的无状态就是deployment控制器的配置。

1、先不要挂载存储,因为需要复制orcl数据库的内容到pvc存储里 

kind: Deployment
metadata:
  name: oracle-db-zmbuy
  namespace: main-data-test
  labels:
    app: oracle-db-zmbuy
    name: oracle-db
    version: 11.2.0
  annotations:
    deployment.kubernetes.io/revision: '3'
    sidecar.istio.io/inject: 'false'
spec:
  replicas: 1
  selector:
    matchLabels:
      app: oracle-db-zmbuy
      name: oracle-db
  template:
    metadata:
      labels:
        app: oracle-db-zmbuy
        name: oracle-db
        version: 11.2.0
      annotations:
        cni.projectcalico.org/ipv4pools: '["172.25.0.0/16"]'
        sidecar.istio.io/inject: 'false'
        system/container-registry-map: '{"oracle":"default"}'
        system/registry: default
        v1.multus-cni.io/default-network: kube-system/calico@eth0
    spec:
      containers:
        - name: oracle
          image: 'dockerhub.jxstjh.com/jxstjh-public/oracle:iatebes-11g'
          ports:
            - containerPort: 1521
              protocol: TCP
          resources:
            limits:
              cpu: '2'
              memory: 4Gi
            requests:
              cpu: '1'
              memory: 1Gi
          terminationMessagePath: /dev/termination-log
          terminationMessagePolicy: File
          imagePullPolicy: IfNotPresent
          securityContext:
            privileged: false
      restartPolicy: Always
      terminationGracePeriodSeconds: 30
      dnsPolicy: ClusterFirst
      serviceAccountName: default
      serviceAccount: default
      securityContext: {}
  strategy:
    type: Recreate
  minReadySeconds: 10
  revisionHistoryLimit: 10
  progressDeadlineSeconds: 600

生效oracle到deployment配置:

# kubectl apply -f oracle-11g.yml

 

2、将没有挂载存储里的orcl数据库的内容复制文件到本地

kubectl cp oracle-db-zmbuy-7f59695454-fwcnp:/opt/oracle/app/oradata/orcl ./orcl

注:这时候在本地有一个orcl的文件夹

3、修改oracle到deployment配置内容,挂载pvc存储:

kind: Deployment
metadata:
  name: oracle-db-zmbuy
  namespace: main-data-test
  labels:
    app: oracle-db-zmbuy
    name: oracle-db
    version: 11.2.0
  annotations:
    deployment.kubernetes.io/revision: '3'
    sidecar.istio.io/inject: 'false'
spec:
  replicas: 1
  selector:
    matchLabels:
      app: oracle-db-zmbuy
      name: oracle-db
  template:
    metadata:
      labels:
        app: oracle-db-zmbuy
        name: oracle-db
        version: 11.2.0
      annotations:
        cni.projectcalico.org/ipv4pools: '["172.25.0.0/16"]'
        sidecar.istio.io/inject: 'false'
        system/container-registry-map: '{"oracle":"default"}'
        system/registry: default
        v1.multus-cni.io/default-network: kube-system/calico@eth0
    spec:
      volumes:
        - name: oracle-11g-pvc
          persistentVolumeClaim:
            claimName: oracle-11g-pvc
      containers:
        - name: oracle
          image: 'dockerhub.jxstjh.com/jxstjh-public/oracle:iatebes-11g'
          ports:
            - containerPort: 1521
              protocol: TCP
          resources:
            limits:
              cpu: '2'
              memory: 4Gi
            requests:
              cpu: '1'
              memory: 1Gi
          volumeMounts:
            - name: oracle-11g-pvc
              mountPath: /opt/oracle/app/oradata/
          terminationMessagePath: /dev/termination-log
          terminationMessagePolicy: File
          imagePullPolicy: IfNotPresent
          securityContext:
            privileged: false
      restartPolicy: Always
      terminationGracePeriodSeconds: 30
      dnsPolicy: ClusterFirst
      serviceAccountName: default
      serviceAccount: default
      securityContext: {}
  strategy:
    type: Recreate
  minReadySeconds: 10
  revisionHistoryLimit: 10
  progressDeadlineSeconds: 600

生效deplyment控制器

# kubectl apply -f oracle-11g.yml

4、替换control02.ctl文件:

进入到oracle到pod容器中

# kubectl exec -it oracle-db-zmbuy-75f497f78d-gdjr5 bash

删除oracle的机制文件
 

# rm -rf /opt/oracle/app/flash_recovery_area/helowin/control02.ctl 

复制新的oracle的机制文件

# cp /opt/oracle/app/oradata/orcl/control01.ctl /home/oracle/app/flash_recovery_area/orcl/control02.ctl 

修改属性 control02.ctl文件的属性

# chown oracle:oinstall /opt/oracle/app/flash_recovery_area/control02.ctl

5、重启oracle数据库:

# su - oracle

$ source ~/.bash_profile

$ sqlplus / as sysdba

SQL> shutdown immediate;

SQL> startup;

5、设置oracle登入配置:

#登录sqlplus
SQL> sqlplus / as sysdba   

#修改system用户账号密码
SQL> alter user system identified by system; 

#修改sys用户账号密码 
SQL> alter user sys identified by system;  

#创建内部管理员账号密码都是test  
SQL> create user test identified by test;  

#将dba权限授权给内部管理员账号和密码
SQL> grant connect,resource,dba to test;  

#修改密码规则策略为密码永不过期 
SQL> ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED; 

#修改数据库最大连接数据
SQL> alter system set processes=1000 scope=spfile;  #修改数据库最大连接数据

6、使用连接工具进行验证:

注:到此就完成了oracle 11g的部署,但是这里目前无法自定义sid的值,等我研究好了,再分析給大家。 

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 要在Kubernetes(k8s)上部署Oracle数据库,需要按照以下步骤进行: 1. 准备Kubernetes集群:确保已经配置好了一个功能正常的Kubernetes集群,包括Master节点和Worker节点。 2. 下载Oracle容器镜像:从官方或可信的源中下载适用于Oracle数据库的容器镜像。你可以从Oracle官方下载或使用第三方经过验证的镜像。 3. 创建Kubernetes对象:使用Kubernetes的命令行客户端或Kubernetes配置文件(YAML格式),创建适当的Kubernetes对象,如Deployment、Service和PersistentVolumeClaim。在创建Deployment对象时,需要指定Oracle容器镜像的名称和版本。 4. 挂载存储卷:在创建PersistentVolumeClaim对象时,将持久化存储卷(例如NFS、iSCSI等)与Oracle容器关联起来,以确保数据的持久化存储。 5. 配置Oracle参数:可以通过修改Oracle容器的环境变量或配置文件,设置Oracle数据库的相关参数,例如监听端口、数据目录等。 6. 启动Oracle容器:通过Kubernetes命令行客户端,执行创建的Deployment对象,以启动Oracle容器。此时,Kubernetes将为Oracle容器配置适当的网络和存储资源。 7. 连接Oracle数据库:使用Oracle SQL*Plus或其他数据库客户端工具,连接到Oracle容器启动的服务,并执行必要的数据库操作,例如创建用户、表空间、表等。 通过以上步骤,就可以在Kubernetes上成功部署Oracle数据库。当然,在实际应用中,还需要针对特定的需求进行更多的优化和配置。 ### 回答2: Kubernetes(简称K8s)是一个开源的容器编排和管理工具,它提供了一种简单、可靠的方式来部署和管理容器化应用程序。要在Kubernetes部署Oracle数据库,需要进行以下步骤: 1. 创建一个Kubernetes集群:使用工具如Minikube或Kubeadm来创建一个本地或生产级别的Kubernetes集群。 2. 安装Helm:Helm是一个Kubernetes的包管理工具,使用Helm可以方便地部署和管理应用程序。通过Helm,我们可以安装和配置Oracle数据库的Helm Chart。 3. 配置Persistent Volume(PV)和Persistent Volume Claim(PVC):Oracle数据库需要一个持久化存储来存储数据。在Kubernetes中,可以使用PV和PVC来提供持久化存储。根据需要,创建一个PVC并绑定到一个可用的PV。 4. 下载并安装Oracle Operator:Oracle Operator是一个运行在Kubernetes上的特殊的容器,用于管理和操作Oracle数据库实例。使用Helm安装Oracle Operator。 5. 配置Oracle数据库实例:通过配置Oracle Operator的参数来创建Oracle数据库实例。包括指定数据库的名称、版本、用户名和密码等。 6. 启动Oracle数据库实例:使用kubectl命令或通过Kubernetes Dashboard来启动数据库实例。 7. 验证数据库启动:检查数据库的状态和日志,确保数据库已经成功启动并且可用。 8. 配置网络访问:Oracle数据库通常需要通过网络进行访问。在Kubernetes中,可以使用Service和Ingress来暴露和路由网络流量到数据库实例。 9. 监控和管理数据库:使用Kubernetes的监控和管理工具来监视和管理Oracle数据库实例的健康和性能。 总结来说,通过在Kubernetes部署Oracle数据库,可以利用Kubernetes强大的容器编排和管理功能,轻松地部署、扩展和管理Oracle数据库实例,提高数据库的可用性和弹性。 ### 回答3: Kubernetes (k8s) 是一个开源的容器编排平台,允许用户轻松部署、扩展和管理容器化应用程序。Oracle是一个功能强大的关系型数据库管理系统,被广泛用于企业级应用。 要在k8s上部署Oracle数据库,我们需要遵循以下步骤: 1. 确定k8s集群的规模和资源要求。Oracle数据库对于CPU、内存和存储资源有较高的要求,因此需要在k8s集群中确保有足够的资源供应。 2. 配置PV(持久化卷)和PVC(持久化卷声明)来存储和保护数据库的数据。PV是k8s中与存储介质相关联的抽象,而PVC是对PV的请求。 3. 创建一个Deployment对象来定义数据库实例的Pod规范。在Deployment中指定容器镜像、环境变量、挂载卷和资源限制等信息,以确保数据库容器能够正常运行。 4. 配置Service对象以暴露数据库服务。使用Service对象可以为数据库提供一个稳定的访问入口,并将请求转发给正确的Pod。 5. 为数据库配置健康检查和自动容错功能。使用k8s的Liveness和Readiness探针,可以监测数据库容器的状态,并在出现故障时自动调整或重启。 6. 使用ConfigMap和Secrets来管理和保护数据库的配置文件和敏感数据。可以将数据库的连接信息、认证密钥等存储在ConfigMap和Secrets中,以便轻松管理和更新。 7. 进行数据库初始化和配置。可以在容器启动时运行初始化脚本或配置文件,以确保数据库的正确设置和参数配置。 8. 监控和日志管理。使用k8s提供的监控工具和日志收集器,可以实时监测数据库的性能指标、容器日志和事件。 总之,在k8s上部署Oracle数据库需要仔细规划和配置,以确保数据库能够以高可用和可扩展的方式运行,并保护数据库的数据安全和稳定性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jiang0615csdn

你对鼓励是我最大的动力来源

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值