---
title: 在K8S上面搭建一主两备openGauss-官方技术文章-鲲鹏社区
description: 本文主要介绍如何在K8S上面搭建一主两备openGauss。
keywords: Gauss,上面搭建一主,两备,官方技术文章,鲲鹏社区,更新,准备,所需镜像名字
url: https://www.hikunpeng.com/developer/techArticles/20230913-3?envFlag=1
section: (其他)
---

# 在K8S上面搭建一主两备openGauss-官方技术文章-鲲鹏社区

URL: https://www.hikunpeng.com/developer/techArticles/20230913-3?envFlag=1
描述: 本文主要介绍如何在K8S上面搭建一主两备openGauss。
关键词: Gauss,上面搭建一主,两备,官方技术文章,鲲鹏社区,更新,准备,所需镜像名字

官方技术文章 [了解详情](https://www.hikunpeng.com/zh/developer/techArticles)

在K8S上面搭建一主两备openGauss

在K8S上面搭建一主两备openGauss

实战经验

发表于 2021/10/09

0

初始化环境（以下操作需在master和node节点执行）

| IP | Hostname | Role |
| --- | --- | ---|
| 192.168.0.1 | k8smaster | master |
| 192.168.0.2 | k8snode01 | node |

firewalld

```
systemctl stop firewalld
systemctl disable firewalld
```

## 更新docker

```
rpm -qa|grep docker
yum remove docker
curl -fsSL https://get.docker.com/ | sh
systemctl start docker
systemctl enable docker
```

## 准备kubernetes源

```
vim /etc/yum.repos.d/kubernetes.repo

[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg

yum install -y kubeadm kubectl etcd
```

## 查看kubeadm所需镜像名字

```
[root@ecs-66cc dockerimages]# kubeadm config images list

k8s.gcr.io/kube-apiserver:v1.21.1
k8s.gcr.io/kube-controller-manager:v1.21.1
k8s.gcr.io/kube-scheduler:v1.21.1
k8s.gcr.io/kube-proxy:v1.21.1
k8s.gcr.io/pause:3.4.1
k8s.gcr.io/etcd:3.4.13-0
k8s.gcr.io/coredns/coredns:v1.8.0
```

## 安装K8S所需镜像

```
docker pull registry.aliyuncs.com/google_containers/kube-apiserver:v1.21.1
docker pull registry.aliyuncs.com/google_containers/kube-controller-manager:v1.21.1
docker pull registry.aliyuncs.com/google_containers/kube-scheduler:v1.21.1
docker pull registry.aliyuncs.com/google_containers/kube-proxy:v1.21.1
docker pull registry.aliyuncs.com/google_containers/pause:3.4.1
docker pull registry.aliyuncs.com/google_containers/etcd:3.4.13-0
docker pull coredns/coredns:1.8.0
```

## 修改docker Tag 使其与kubeadm所需匹配

（1）用国内源下载镜像

```
docker tag registry.aliyuncs.com/google_containers/kube-apiserver:v1.21.1 k8s.gcr.io/kube-apiserver:v1.21.1
docker tag registry.aliyuncs.com/google_containers/kube-controller-manager:v1.21.1 k8s.gcr.io/kube-controller-manager:v1.21.1
docker tag registry.aliyuncs.com/google_containers/kube-scheduler:v1.21.1 k8s.gcr.io/kube-scheduler:v1.21.1
docker tag registry.aliyuncs.com/google_containers/kube-proxy:v1.21.1 k8s.gcr.io/kube-proxy:v1.21.1
docker tag registry.aliyuncs.com/google_containers/pause:3.4.1 k8s.gcr.io/pause:3.4.1
docker tag registry.aliyuncs.com/google_containers/etcd:3.4.13-0 k8s.gcr.io/etcd:3.4.13-0
docker tag docker.io/coredns/coredns:1.8.0 k8s.gcr.io/coredns/coredns:v1.8.0
```

（2）删除无效镜像

```
docker rmi registry.aliyuncs.com/google_containers/kube-apiserver:v1.21.1
docker rmi registry.aliyuncs.com/google_containers/kube-controller-manager:v1.21.1
docker rmi registry.aliyuncs.com/google_containers/kube-scheduler:v1.21.1
docker rmi registry.aliyuncs.com/google_containers/kube-proxy:v1.21.1
docker rmi registry.aliyuncs.com/google_containers/pause:3.4.1
docker rmi registry.aliyuncs.com/google_containers/etcd:3.4.13-0
docker rmi coredns/coredns:1.8.0
```

## 编写K8S初始化配置&&初始化(在master节点执行)

kubeadm.yaml

```
apiVersion: kubeadm.k8s.io/v1beta2
clusterName: kubernetes
kind: ClusterConfiguration
kubernetesVersion: v1.21.1
controllerManager:
extraArgs:
horizontal-pod-autoscaler-use-rest-clients: "true"
horizontal-pod-autoscaler-sync-period: "10s"
node-monitor-grace-period: "10s"
apiServer:
extraArgs:
runtime-config: "api/all=true"
```

拷贝配置文件至kubernetes 并初始化时指定：

```
cp kubeadm.yaml /etc/kubernetes/manifests/
kubeadm init --config kubeadm.yaml
```

成功后保留如下信息，后面会使用到：

```
kubeadm join 192.168.0.35:6443 --token ru2883.u4rhwkx5oqrol9at \
--discovery-token-ca-cert-hash sha256:f2dbe7ce49b322e8145b6e9b4303e56468ad1352daabecb797f7bd161a64e018
```

初始化：

```
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
```

安装网络插件：

```
kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')"
```

## Node节点join

Node节点执行完安装后无需初始化，执行kubeadm join命令加入主节点：

```
kubeadm join 192.168.0.35:6443 --token ru2883.u4rhwkx5oqrol9at \
--discovery-token-ca-cert-hash sha256:f2dbe7ce49b322e8145b6e9b4303e56468ad1352daabecb797f7bd161a64e018
```

## 导入镜像(master和node节点)

```
docker load < opengauss.tar.gz
```

## 创建service(svc)（master节点）

给pod创建对应的svc：

```
kubectl create -f opengauss-svc.yaml
```

opengauss-svc.yaml文件内容如下：

```
apiVersion: v1
kind: Service
metadata:
name: opengauss-service-1
spec:
ports:
- port: 5432
protocol: TCP
targetPort: 5432
name: gsql
- port: 5434
protocol: TCP
targetPort: 5434
name: localport
- port: 2380
protocol: TCP
targetPort: 2380
name: etcd1-service
- port: 2379
protocol: TCP
targetPort: 2379
name: etcd1-local
selector:
app: opengauss-1
clusterIP: None

---

apiVersion: v1
kind: Service
metadata:
name: opengauss-service-2
spec:
ports:
- port: 5432
protocol: TCP
targetPort: 5432
name: gsql
- port: 5434
protocol: TCP
targetPort: 5434
name: localport
- port: 2380
protocol: TCP
targetPort: 2380
name: etcd1-service
- port: 2379
protocol: TCP
targetPort: 2379
name: etcd1-local
selector:
app: opengauss-2
clusterIP: None

---

apiVersion: v1
kind: Service
metadata:
name: opengauss-service-3
spec:
ports:
- port: 5432
protocol: TCP
targetPort: 5432
name: gsql
- port: 5434
protocol: TCP
targetPort: 5434
name: localport
- port: 2380
protocol: TCP
targetPort: 2380
name: etcd1-service
- port: 2379
protocol: TCP
targetPort: 2379
name: etcd1-local
selector:
app: opengauss-3
clusterIP: None
```

## 创建pod（master节点）

创建openGauss主备pod：

```
kubectl create -f opengauss-pod.yaml
```

opengauss-pod.yaml文件内容如下：

```
apiVersion: v1
kind: Pod
metadata:
name: opengauss-1
labels:
app: opengauss-1
spec:
restartPolicy: Never
containers:
- name: opengauss-1
image: opengauss:1.0.5
imagePullPolicy: Never
securityContext:
runAsUser: 0
volumeMounts:
- mountPath: /var/lib/opengauss/data/
name: openguass-volume
ports:
- containerPort: 5432
name: opengauss
env:
- name: HOST_NAME
value: opengauss-1
- name: HOST_IP
valueFrom:
fieldRef:
fieldPath: status.podIP
- name: PEER_IPS
value: opengauss-service-2,opengauss-service-3
- name: PEER_HOST_NAMES
value: opengauss-2,opengauss-3
- name: PORT
value: "5432"
- name: GS_PASSWORD
value: "Test@56789"
- name: SERVER_MODE
value: primary
- name: db_config
value:
volumes:
- name: openguass-volume
hostPath:
path: /data/opengauss-1/
type: DirectoryOrCreate

---

apiVersion: v1
kind: Pod
metadata:
name: opengauss-2
labels:
app: opengauss-2
spec:
restartPolicy: Never
containers:
- name: opengauss-2
image: opengauss:1.0.5
imagePullPolicy: Never
securityContext:
runAsUser: 0
volumeMounts:
- mountPath: /var/lib/opengauss/data/
name: openguass-volume
ports:
- containerPort: 5432
name: opengauss
env:
- name: HOST_NAME
value: opengauss-2
- name: HOST_IP
valueFrom:
fieldRef:
fieldPath: status.podIP
- name: PEER_IPS
value: opengauss-service-1,opengauss-service-3
- name: PEER_HOST_NAMES
value: opengauss-1,opengauss-3
- name: PORT
value: "5432"
- name: GS_PASSWORD
value: "Test@56789"
- name: SERVER_MODE
value: standby
- name: db_config
value:
volumes:
- name: openguass-volume
hostPath:
path: /data/opengauss-2/
type: DirectoryOrCreate

---

apiVersion: v1
kind: Pod
metadata:
name: opengauss-3
labels:
app: opengauss-3
spec:
restartPolicy: Never
containers:
- name: opengauss-3
image: opengauss:1.0.5
imagePullPolicy: Never
securityContext:
runAsUser: 0
volumeMounts:
- mountPath: /var/lib/opengauss/data/
name: openguass-volume
ports:
- containerPort: 5432
name: opengauss
env:
- name: HOST_NAME
value: opengauss-3
- name: HOST_IP
valueFrom:
fieldRef:
fieldPath: status.podIP
- name: PEER_IPS
value: opengauss-service-1,opengauss-service-2
- name: PEER_HOST_NAMES
value: opengauss-1,opengauss-2
- name: PORT
value: "5432"
- name: GS_PASSWORD
value: "Test@56789"
- name: SERVER_MODE
value: standby
- name: db_config
value:
volumes:
- name: openguass-volume
hostPath:
path: /data/opengauss-3/
type: DirectoryOrCreate
```

## 测试数据库（master节点）

（1）进入数据库主节点

```
kubectl exec -it opengauss-1 -- /bin/bash
```

（2）切换用户

```
su omm
```

（3）进入数据库

```
gsql
```

## 常用命令

所有命令在master节点执行。

查看集群节点：

```
kubectl get node
```

查看集群pod：

```
kubectl get pod --all-namespaces
```

查看集群服务：

```
kubectl get svc --all-namespaces
```

进入容器：

```
kubectl exec -it 容器名（单个容器的话为pod名） -n opengauss -- /bin/bash
```

查看pod/svc详情：

```
kubectl describe pod/svc pod/svc名称 -n pod/svc的namespaces
```

查看日志信息：

```
kubectl logs pod pod名称 -n pod的namespaces
```

往期推荐： ·

openGauss X ShardingSphere，分布式方案的另一种最佳实践 [了解详情](http://mp.weixin.qq.com/s?__biz=MzIyMDE3ODk1Nw==&mid=2247495960&idx=1&sn=5d527dd7475c8e3f5067fec91c61fda8&chksm=97cd4e7aa0bac76cb0b6bbab5b9e439494c843ef9c10ccec8df3a568667bd2643d6e50b7ef03&scene=21#wechat_redirect)

如何利用ShardingSphere-proxy搭建openGauss分布式环境 [了解详情](https://www.hikunpeng.com/zh/developer/techArticles/20230912-15?envFlag=1)

patroni For openGauss高可用方案基本原理 [了解详情](https://www.hikunpeng.com/zh/developer/techArticles/20230912-16?envFlag=1)

HAProxy适配openGauss使用指导书 [了解详情](https://www.hikunpeng.com/zh/developer/techArticles/20230912-18?envFlag=1)

本页内容
