环境:
Postgresql的Docker镜像 ->参考Docker安装部署Postgresql
Centos7.x + kubernetes1.23.7 + docker1.13.1 + postgres12.7
pg的docker镜像已经上传到云平台。
Kubernetes参考:https://kubernetes.io/zh-cn/docs/concepts/configuration/configmap
基本命令
命令 | 作用 |
create | 创建资源 |
kubectl get xx/pod/svc | 查询资源 |
kubectl delete -f xx.yaml | 删除资源 |
运行/调试命令
run | 容器运行 |
logs | 查看容器日志 |
describe | 显示资源内部信息 |
attach | 进入容器,建议用exec |
exec | 进入容器命令行 |
资源分类
集群资源
node | node节点 | 集群组成部分 |
namespace | 命名空间 | 隔离pod |
pod资源
pod | pod容器 | 装载容器的最小单元 |
服务资源
service | 服务 | pod对外端口 |
资源管理
命令式方法
kubectl run postgres-deployment --image=postgres:12.7 --port=5432
文件式配置方法
kubectl apply -f postgres.yaml
使用apply创建资源,
如果资源不存在,就创建,相当于执行kubectl create -f nginx-pod.yaml
如果资源存在,就修改,相当于执行kubectl patch -f nginx-pod.yaml
node
查询全部节点
kubectl get node
删除节点
kuberctl delete node
#work节点清空ini配置
kubeadm reset
namespace
查询全部namespace
kubectl get namespace
#default 未指定namespace的对象被分配再这
#kube-public 可以被所有人访问
#kube-system k8s系统空间,存储k8s资源
#kube-node-lease 集群节点之间心跳
获取namespace某个空间的描述
[root@node9 yaml]# kubectl describe namespace kube-public
Name: kube-public
Labels: kubernetes.io/metadata.name=kube-public
Annotations: <none>
Status: Active
No resource quota.
No LimitRange resource.
资源管理方法见命令式和文件式方法
pod
获取全部pod
kubectl get pod
#指定namespace
kubectl get pod -n kube-public
创建pod
apiVersion: v1
kind: ConfigMap
metadata:
name: postgres-config
labels:
app: postgres
data:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: postgres-deployment
spec:
strategy:
type: Recreate
selector:
matchLabels:
app: postgres
replicas: 1
template:
metadata:
labels:
app: postgres
spec:
nodeName: node9
containers:
- name: postgres
image: 10.0.127.9:30012/library/pg127:1.0 #云平台上传镜像地址
imagePullPolicy: "IfNotPresent"
ports:
- containerPort: 5432
envFrom:
- configMapRef:
name: postgres-config
volumeMounts:
- mountPath: /var/lib/postgresql/data #容器内pgdata
name: pgdata
volumes:
- name: pgdata
hostPath:
path: /root/yaml/pgdata-test #与本地磁盘对应
---
apiVersion: v1
kind: Service
metadata:
name: postgres-service
labels:
app: postgres
spec:
type: NodePort
selector:
app: postgres
ports:
- port: 5432
targetPort: 5432
protocol: TCP
nodePort: 21119 #对外映射端口
name: postgres
ConfigMap
ConfigMap 是一种 API 对象,用来将非机密性的数据保存到键值对中。使用时, Pods 可以将其用作环境变量、命令行参数或者存储卷中的配置文件。
https://kubernetes.io/zh-cn/docs/concepts/configuration/configmap/
Deployment
一个 Deployment 为 Pod 和 ReplicaSet 提供声明式的更新能力。
https://kubernetes.io/zh-cn/docs/concepts/workloads/controllers/deployment/
Service
将运行在一组 Pods 上的应用程序公开为网络服务的抽象方法。
https://kubernetes.io/zh-cn/docs/concepts/services-networking/service/
应用部署实例
上传镜像到仓库
编写yaml文件
执行kubectl apply -f xxx.yaml部署应用
查看pod是否成功运行
[root@node9 yaml]# kubectl get pod
NAME READY STATUS RESTARTS AGE
postgres-deployment-794d979c9d-hnwzw 1/1 Running 0 6h19m
查看应用对应的service
[root@node9 yaml]# kubectl get service
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP x0.xxx.xxx.xx <none> 443/TCP 57d
postgres-service NodePort x0.xxx.xxx.xx <none> 5432:21119/TCP 6h19m
尝试外部访问,测试是否能对外部提供服务