⑤ K8s使用Ceph作为存储、监控、日常运维管理_ceph运维管理平台


2、配置storageclass



#1、创建pod时,kubelet需要使用rbd命令去检测和挂载pv对应的ceph image,所以要在所有的worker节点安装ceph客户端ceph-common。将ceph的ceph.client.admin.keyring和ceph.conf文件拷贝到master的/etc/ceph目录下

推送文件到master节点:

scp -rp ceph.client.admin.keyring ceph.conf root@192.168.0.10:/etc/ceph/

在k8s集群每个节点安装(下载ceph的源)

yum -y install ceph-common

#2、创建 osd pool 在ceph的mon或者admin节点
ceph osd pool create kube 16 16

[root@k8s-master ceph]# ceph osd lspools
1 .rgw.root
2 default.rgw.control
3 default.rgw.meta
4 default.rgw.log
5 rbd
6 kube
7 cephfs-data
8 cephfs-metadata

#3、创建k8s访问ceph的用户 在ceph的mon或者admin节点
ceph auth get-or-create client.kube mon ‘allow r’ osd ‘allow class-read object_prefix rbd_children, allow rwx pool=kube’ -o ceph.client.kube.keyring

#4、查看key 在ceph的mon或者admin节点和kube用户
ceph auth get-key client.admin
AQBQhrJeRHJmLxAATSxU4vjf79KgJpVkNb+VsQ==
ceph auth get-key client.kube
AQCQqztfSQNWFxAAdBmLqhJ/thboY0vGcZ7ixQ==

#5、创建 admin secret(使用admin的key)
kubectl create secret generic ceph-secret --type=“kubernetes.io/rbd”
–from-literal=key=AQBQhrJeRHJmLxAATSxU4vjf79KgJpVkNb+VsQ==
–namespace=kube-system

#6、在 default 命名空间创建pvc用于访问ceph的 secret(使用kube用户的key)
kubectl create secret generic ceph-user-secret --type=“kubernetes.io/rbd”
–from-literal=key=AQCQqztfSQNWFxAAdBmLqhJ/thboY0vGcZ7ixQ==
–namespace=default

[root@k8s-master ceph]# kubectl get secret
NAME TYPE DATA AGE
ceph-user-secret kubernetes.io/rbd 1 30s


3、配置StorageClass



cat >storageclass-ceph-rdb.yaml<<EOF
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: dynamic-ceph-rdb
provisioner: ceph.com/rbd
parameters:
monitors: 192.168.0.6:6789,192.168.0.7:6789,192.168.0.8:6789
adminId: admin
adminSecretName: ceph-secret
adminSecretNamespace: kube-system
pool: kube
userId: kube
userSecretName: ceph-user-secret
fsType: ext4
imageFormat: “2”
imageFeatures: “layering”
EOF


4、创建yaml



kubectl apply -f storageclass-ceph-rdb.yaml


5、查看sc



[root@k8s-master ceph]# kubectl get sc
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
dynamic-ceph-rdb ceph.com/rbd Delete Immediate false 11s


#### 测试使用


1、创建pvc测试



cat >ceph-rdb-pvc-test.yaml<<EOF
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: ceph-rdb-claim
spec:
accessModes:
- ReadWriteOnce
storageClassName: dynamic-ceph-rdb
resources:
requests:
storage: 2Gi
EOF

kubectl apply -f ceph-rdb-pvc-test.yaml


2、查看



[root@k8s-master ceph]# kubectl get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
ceph-rdb-claim Bound pvc-214e462d-8da7-4234-ac68-3222900dd176 2Gi RWO dynamic-ceph-rdb 40s

[root@k8s-master ceph]# kubectl get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
pvc-214e462d-8da7-4234-ac68-3222900dd176 2Gi RWO Delete Bound default/ceph-rdb-claim dynamic-ceph-rdb 10s


3、创建 nginx pod 挂载测试



cat >nginx-pod.yaml<<EOF
apiVersion: v1
kind: Pod
metadata:
name: nginx-pod1
labels:
name: nginx-pod1
spec:
containers:

  • name: nginx-pod1
    image: nginx
    ports:
    • name: web
      containerPort: 80
      volumeMounts:
    • name: ceph-rdb
      mountPath: /usr/share/nginx/html
      volumes:
  • name: ceph-rdb
    persistentVolumeClaim:
    claimName: ceph-rdb-claim
    EOF

4、查看



[root@k8s-master ceph]# kubectl get pod
NAME READY STATUS RESTARTS AGE
nginx-pod1 1/1 Running 0 39s

#pod的IP为10.244.58.252


5、修改文件内容



kubectl exec -it nginx-pod1 – /bin/sh -c ‘echo this is from Ceph RBD!!! > /usr/share/nginx/html/index.html’


6、访问测试



[root@k8s-master ceph]# curl http://10.244.58.252
this is from Ceph RBD!!!

#查看rbd块设备的数据
[root@k8s-master ceph]# rados -p kube ls --all
rbd_data.67b206b8b4567.0000000000000102
rbd_data.67b206b8b4567.00000000000000a0
rbd_data.67b206b8b4567.000000000000010b
rbd_data.67b206b8b4567.0000000000000100
rbd_id.image02_clone01
rbd_id.kubernetes-dynamic-pvc-5fd1042a-e13e-11ea-9abe-1edcc60c1557


7、清理



kubectl delete -f nginx-pod.yaml
kubectl delete -f ceph-rdb-pvc-test.yaml

#rbd块中已经清除了
[root@k8s-master ceph]# rados -p kube ls --all
rbd_id.image02_clone01
rbd_header.2828baf9d30c7
rbd_directory
rbd_children
rbd_info
rbd_object_map.2828baf9d30c7


## 四、POD使用CephFS做为持久数据卷


CephFS方式支持k8s的pv的3种访问模式ReadWriteOnce,ReadOnlyMany ,ReadWriteMany


### Ceph端创建CephFS pool


1、如下操作在ceph的mon或者admin节点  
 CephFS需要使用两个Pool来分别存储数据和元数据



ceph osd pool create fs_data 128
ceph osd pool create fs_metadata 128
ceph osd lspools


2、创建一个CephFS



ceph fs new cephfs fs_metadata fs_data


3、查看



ceph fs ls


### 部署 cephfs-provisioner


1、使用社区提供的cephfs-provisioner



cat >external-storage-cephfs-provisioner.yaml<<EOF
apiVersion: v1
kind: ServiceAccount
metadata:
name: cephfs-provisioner
namespace: kube-system

kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: cephfs-provisioner
rules:

  • apiGroups: [“”]
    resources: [“persistentvolumes”]
    verbs: [“get”, “list”, “watch”, “create”, “delete”]
  • apiGroups: [“”]
    resources: [“persistentvolumeclaims”]
    verbs: [“get”, “list”, “watch”, “update”]
  • apiGroups: [“storage.k8s.io”]
    resources: [“storageclasses”]
    verbs: [“get”, “list”, “watch”]
  • apiGroups: [“”]
    resources: [“events”]
    verbs: [“create”, “update”, “patch”]
  • apiGroups: [“”]
    resources: [“endpoints”]
    verbs: [“get”, “list”, “watch”, “create”, “update”, “patch”]
  • apiGroups: [“”]
    resources: [“secrets”]
    verbs: [“create”, “get”, “delete”]

kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: cephfs-provisioner
subjects:

  • kind: ServiceAccount
    name: cephfs-provisioner
    namespace: kube-system
    roleRef:
    kind: ClusterRole
    name: cephfs-provisioner
    apiGroup: rbac.authorization.k8s.io

apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: cephfs-provisioner
namespace: kube-system
rules:

  • apiGroups: [“”]
    resources: [“secrets”]
    verbs: [“create”, “get”, “delete”]

apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: cephfs-provisioner
namespace: kube-system
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: Role
name: cephfs-provisioner
subjects:

  • kind: ServiceAccount
    name: cephfs-provisioner
    namespace: kube-system

apiVersion: apps/v1
kind: Deployment
metadata:
name: cephfs-provisioner
namespace: kube-system
spec:
selector:
matchLabels:
app: cephfs-provisioner
replicas: 1
strategy:
type: Recreate
template:
metadata:
labels:
app: cephfs-provisioner
spec:
containers:
- name: cephfs-provisioner
image: “quay.io/external_storage/cephfs-provisioner:latest”
env:
- name: PROVISIONER_NAME
value: ceph.com/cephfs
command:
- “/usr/local/bin/cephfs-provisioner”
args:
- “-id=cephfs-provisioner-1”
serviceAccount: cephfs-provisioner
EOF
kubectl apply -f external-storage-cephfs-provisioner.yaml


2、查看状态 等待running之后 再进行后续的操作



kubectl get pod -n kube-system


### 配置 storageclass


1、查看key 在ceph的mon或者admin节点



ceph auth get-key client.admin


2、创建 admin secret



#上一案例已创建了则不用再次执行
kubectl create secret generic ceph-secret --type=“kubernetes.io/rbd”
–from-literal=key=AQBQhrJeRHJmLxAATSxU4vjf79KgJpVkNb+VsQ==
–namespace=kube-system


apiVersion: v1
kind: Secret
metadata:
name: ceph-secret-admin
namespace: kube-system
type: “kubernetes.io/rbd”
data:

ceph auth get-key client.admin | base64

key: QVFDckJ3dGVBSTdUT2hBQXpGZ1JaTzBNSy9kYTJBRm41RWRkcUE9PQ==


3、查看 secret



kubectl get secret ceph-secret -n kube-system -o yaml


4、配置 StorageClass



cat >storageclass-cephfs.yaml<<EOF
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: dynamic-cephfs
provisioner: ceph.com/cephfs
parameters:
monitors: 192.168.0.6:6789,192.168.0.7:6789,192.168.0.8:6789
adminId: admin
adminSecretName: ceph-secret
adminSecretNamespace: “kube-system”
claimRoot: /volumes/kubernetes
EOF


5、创建



kubectl apply -f storageclass-cephfs.yaml


6、查看



kubectl get sc


### 测试使用




为了做好运维面试路上的助攻手,特整理了上百道 **【运维技术栈面试题集锦】** ,让你面试不慌心不跳,高薪offer怀里抱!

这次整理的面试题,**小到shell、MySQL,大到K8s等云原生技术栈,不仅适合运维新人入行面试需要,还适用于想提升进阶跳槽加薪的运维朋友。**

![](https://img-blog.csdnimg.cn/img_convert/f3e02533c1dcd50a3875253eb57b04a3.png)

本份面试集锦涵盖了

*   **174 道运维工程师面试题**
*   **128道k8s面试题**
*   **108道shell脚本面试题**
*   **200道Linux面试题**
*   **51道docker面试题**
*   **35道Jenkis面试题**
*   **78道MongoDB面试题**
*   **17道ansible面试题**
*   **60道dubbo面试题**
*   **53道kafka面试**
*   **18道mysql面试题**
*   **40道nginx面试题**
*   **77道redis面试题**
*   **28道zookeeper**

**总计 1000+ 道面试题, 内容 又全含金量又高**

*   **174道运维工程师面试题**

> 1、什么是运维?

> 2、在工作中,运维人员经常需要跟运营人员打交道,请问运营人员是做什么工作的?

> 3、现在给你三百台服务器,你怎么对他们进行管理?

> 4、简述raid0 raid1raid5二种工作模式的工作原理及特点

> 5、LVS、Nginx、HAproxy有什么区别?工作中你怎么选择?

> 6、Squid、Varinsh和Nginx有什么区别,工作中你怎么选择?

> 7、Tomcat和Resin有什么区别,工作中你怎么选择?

> 8、什么是中间件?什么是jdk?

> 9、讲述一下Tomcat8005、8009、8080三个端口的含义?

> 10、什么叫CDN?

> 11、什么叫网站灰度发布?

> 12、简述DNS进行域名解析的过程?

> 13、RabbitMQ是什么东西?

> 14、讲一下Keepalived的工作原理?

> 15、讲述一下LVS三种模式的工作过程?

> 16、mysql的innodb如何定位锁问题,mysql如何减少主从复制延迟?

0+ 道面试题, 内容 又全含金量又高**

*   **174道运维工程师面试题**

> 1、什么是运维?

> 2、在工作中,运维人员经常需要跟运营人员打交道,请问运营人员是做什么工作的?

> 3、现在给你三百台服务器,你怎么对他们进行管理?

> 4、简述raid0 raid1raid5二种工作模式的工作原理及特点

> 5、LVS、Nginx、HAproxy有什么区别?工作中你怎么选择?

> 6、Squid、Varinsh和Nginx有什么区别,工作中你怎么选择?

> 7、Tomcat和Resin有什么区别,工作中你怎么选择?

> 8、什么是中间件?什么是jdk?

> 9、讲述一下Tomcat8005、8009、8080三个端口的含义?

> 10、什么叫CDN?

> 11、什么叫网站灰度发布?

> 12、简述DNS进行域名解析的过程?

> 13、RabbitMQ是什么东西?

> 14、讲一下Keepalived的工作原理?

> 15、讲述一下LVS三种模式的工作过程?

> 16、mysql的innodb如何定位锁问题,mysql如何减少主从复制延迟?

> 17、如何重置mysql root密码?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值