ceph运维操作
一 统一节点上ceph.conf文件如果是在admin节点修改的ceph.conf,想推送到所有其他节点,则需要执行下述命令
1ceph-deploy --overwrite-conf config push mon01 mon02 mon03 osd01 osd02 osd03
修改完毕配置文件后需要重启服务生效,请看下一小节
二 ceph集群服务管理!!!下述操作均需要在具体运行服务的那个节点上运行,而不是admin节点!!!
2.1 方式一在各具体节点执行下行命令,重启节点上的所有ceph守护进程
1systemctl restart ceph.target
2.2 方式二在各具体节点执行下行命令,按类型重启相应的守护进程
1、重启 mgr 守护进程12systemctl restart ceph-mgr.target
2、重启 mds 守护进程1systemctl restart ceph-mds.target
3、重启 rgw 守护进程1systemctl restart ceph-radosgw.target
4、重启 mon 守护进程1systemctl restar ...
centos7搭建ceph集群
一、服务器规划
主机名
主机IP
磁盘
角色
node3
public-ip:172.18.112.20 cluster-ip: 172.18.112.20
vdb
ceph-deploy,monitor,mgr,osd
node4
public-ip:172.18.112.19 cluster-ip: 172.18.112.19
vdb
monitor,mgr,osd
node5
public-ip:172.18.112.18 cluster-ip: 172.18.112.18
vdb
monitor,mgr,osd
二、设置主机名主机名设置,三台主机分别执行属于自己的命令node3
12[root@localhost ~]# hostnamectl set-hostname nod3[root@localhost ~]# hostname node3
node4
123[root@localhost ~]# hostnamectl set-hostname node4[root@localhost ~]# hostname node4
node5 ...
K8S使用ceph-csi持久化存储之RBD
创建一个ceph pool 创建存储池ceph集群请看这里:https://imszz.com/p/877f6188/
123ceph osd pool create rbd 128ceph osd pool set-quota rbd max_bytes $((50 * 1024 * 1024 * 1024)) #50G的存储池rbd pool init rbd
查看集群状态123456789101112131415[root@node3 ~]# ceph -s cluster: id: 3a2a06c7-124f-4703-b798-88eb2950361e health: HEALTH_OK services: mon: 3 daemons, quorum node5,node4,node3 mgr: node3(active) osd: 3 osds: 3 up, 3 in data: pools: 1 pools, 128 pgs objects: 23 objects, 22 MiB usage: ...
Linux类型虚拟机磁盘扩容
1.1 Linux类型虚拟机磁盘扩容步骤1 查看磁盘状态在虚拟机操作系统内的命令行终端上再次执行“fdisk -l”,发现虚拟磁盘总共有416101个柱面,但只使用了其中的208051个柱面,未被使用的柱面就是扩容之后的磁盘,下面需要为未被使用的柱面创建分区。
123456789101112131415161718192021222324252627282930313233343536373839[root@yjgltpc-cgzs-2 ~]# fdisk -l Disk /dev/vda: 214.7 GB, 214748364800 bytes16 heads, 63 sectors/track, 416101 cylindersUnits = cylinders of 1008 * 512 = 516096 bytesSector size (logical/physical): 512 bytes / 512 bytesI/O size (minimum/optimal): 512 by ...
k8s部署nacos-nfs版本
官方给出了两种方式去搭建集权其中一种是快速搭建方式,另一种是集群搭建方式。但是快速搭建的劣势是数据没有持久化,可能会出现数据集丢失的问题,一个集群,做到高可用,数据放入mysql数据库,才是生产环境必须要使用的方式。可以使用自建已有mysql
即在这个k8s集群上搭建nacos集群。
下载代码(代码中自带执行脚本的)1git clone https://github.com/nacos-group/nacos-k8s.git
下载之后,上传代码到可执行服务器上。
部署 NFS为什么要部署nfs呢?什么是nfs呢?在高级使用中,Nacos在K8S拥有自动扩容缩容和数据持久特性,请注意如果需要使用这部分功能请使用PVC持久卷,Nacos的自动扩容缩容需要依赖持久卷,以及数据持久化也是一样,本例中使用的是NFS来使用PVC。也就是说nacos是有状态服务,需要持久化磁盘存储数据。NFS:Network File System(NFS),网络文件系统,存储数据的硬盘。
这个nfs服务部署在哪里?可以部署在这样一台机器上,可以和上面的k8s集群通讯,这里选 ...
K8S 部署 Statefulset mysql
Statefulset MySQL此例是多副本的 MySQL 数据库。示例应用的拓扑结构有一个主服务器和多个副本,使用异步的基于行(Row-Based)的数据复制。
说明: 这不是生产环境下配置。 尤其注意,MySQL 设置都使用的是不安全的默认值,这是因为我们想把重点放在 Kubernetes 中运行有状态应用程序的一般模式上。
创建存储卷集群需要用到存储,准备持久卷(PersistentVolume,简称PV),我这里以yaml文件创建3个PV。如后续伸缩需要更新PersistentVolume 配置
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647kind: PersistentVolumeapiVersion: v1metadata: name: k8s-pv-my1 labels: type: mysqlspec: capacity: storage: 20Gi storageClassName: mysql accessMode ...
K8S基于ingress-nginx实现灰度发布
注解说明通过给 Ingress 资源指定 Nginx Ingress 所支持的 annotation 可实现金丝雀发布。需给服务创建2个 Ingress,其中1个常规 Ingress,另1个为nginx.ingress.kubernetes.io/canary: "true"· 固定的 annotation 的 Ingress,称为 Canary Ingress。Canary Ingress 一般代表新版本的服务,结合另外针对流量切分策略的 annotation 一起配置即可实现多种场景的金丝雀发布。以下为相关 annotation 的详细介绍:
nginx.ingress.kubernetes.io/canary-by-header表示如果请求头中包含指定的 header 名称,并且值为 always,就将该请求转发给该 Ingress 定义的对应后端服务。如果值为 never 则不转发,可以用于回滚到旧版。如果为其他值则忽略该 annotation。
nginx.ingress.kubernetes.io/canary-by-header-value该 ann ...
K8S 部署 Statefulset zookeeper
创建存储卷Zookeeper集群需要用到存储,这里需要准备持久卷(PersistentVolume,简称PV),我这里以yaml文件创建3个PV,供待会儿3个Zookeeper节点创建出来的持久卷声明
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950kind: PersistentVolumeapiVersion: v1metadata: name: k8s-pv-zk1 annotations: volume.beta.kubernetes.io/storage-class: "anything" labels: type: zookeeperspec: capacity: storage: 3Gi accessModes: - ReadWriteOnce hostPath: path: "/var/lib/zookeeper" ...
k8s 跨 namespace 访问服务
在K8S中,同一个命名空间(namespace)下的服务之间调用,之间通过服务名(service name)调用即可。不过在更多时候,我们可能会将一些服务单独隔离在一个命名空间中(比如我们将中间件服务统一放在 middleware 命名空间中,将业务服务放在 business 命名空间中)。 遇到这种情况,我们就需要跨命名空间访问,K8S 对service 提供了四种不同的类型,针对这个问题我们选用 ExternalName 类型的 service 即可。
k8s service 分为四种类型分别为:
ClusterIp(默认类型,每个Node分配一个集群内部的Ip,内部可以互相访问,外部无法访问集群内部)
NodePort(基于ClusterIp,另外在每个Node上开放一个端口,可以从所有的位置访问这个地址)
LoadBalance(基于NodePort,并且有云服务商在外部创建了一个负载均衡层,将流量导入到对应Port。要收费的,一般由云服务商提供,比如阿里云、AWS等均提供这种服务)
ExternalName(将外部地址经过集群内部的再一次封装,实际上就是集群DNS服务器将C ...
污点(taints)与容忍(tolerations)
对于nodeAffinity无论是硬策略还是软策略方式,都是调度 pod 到预期节点上,而Taints恰好与之相反,如果一个节点标记为 Taints ,除非 pod 也被标识为可以容忍污点节点,否则该 Taints 节点不会被调度 pod。
比如用户希望把 Master 节点保留给 Kubernetes 系统组件使用,或者把一组具有特殊资源预留给某些 pod,则污点就很有用了,pod 不会再被调度到 taint 标记过的节点。我们搭建的集群默认就给 master 节点添加了一个污点标记,所以我们看到我们平时的 pod 都没有被调度到 master 上去:
1234567891011$ kubectl describe node masterName: masterRoles: masterLabels: beta.kubernetes.io/arch=amd64 beta.kubernetes.io/os=linux ...