这杯可乐有点甜

这杯可乐有点甜 查看完整档案

深圳编辑湖南城市学院  |  信息 编辑sangfor  |  研发工程师 编辑 github.com/chanbiao0816 编辑
编辑

研发工程师

个人动态

这杯可乐有点甜 发布了文章 · 3月4日

【ceph】安装过程遇到的问题

1.执行名称ceph-deploy new node2,报错:

bash: python2: command not found
[ceph_deploy][ERROR ] RuntimeError: connecting to host: node2 resulted in errors: IOError cannot send (already closed?)

原因是node2上没有安装python2,通过命令apt install python-minimal安装即可。

2.

查看原文

赞 0 收藏 0 评论 0

这杯可乐有点甜 发布了文章 · 3月3日

【kubesphere】python单体应用的CICD流程

背景

依据官方文档java应用的案例,记录下在kubesphere上,构建python单体应用的CICD流程。

简介

流程一共分为以下四个步骤:

  1. 拉取代码
  2. 代码扫描
  3. 构建镜像&推送到仓库
  4. 部署

准备工作

环境准备

在kubesphere上安装devops,并配置好sonarqube,添加jenkins agent。

启用devops:https://kubesphere.com.cn/doc...
配置sonarqube:https://kubesphere.com.cn/doc...
添加jenkins agent:https://segmentfault.com/a/11...

项目准备

创建一个新工程,以单体flask应用为例,需要包含以下文件。
├── Dockerfile # 镜像构建文件
├── deploy
│ ├── dev # dev环境部署文件
│ └── pro # pro环境部署文件
└── tests

创建企业空间、账号、项目

在kubesphere中,权限分为平台、企业空间、项目级别。平台是对kubesphere的权限,企业空间对应团队。对于运维人员,在平台级别设置相应的权限;对于开发测试人员,先邀请到企业空间内,再根据项目分配相应的权限。

点击右上角的【平台管理】,选择【访问控制】,进入【账号管理】,创建一个账号,角色设置为platform-regular
image.png

进入【企业空间】,创建一个企业空间。
image.png

点击新建的企业空间,进入【企业空间设置】-【企业成员】,邀请新建的用户,并设置角色为demo-workspace-self-provisioner
image.png

点击右上角的【平台管理】,选择【集群管理】,进入【项目管理】,创建一个项目,分配到企业空间,设置项目管理员。
image.png

此处的项目名称对应k8s中的namespace。

步骤

创建devops工程

使用新用户登录kubesphere。

按【F1】,选择企业空间。

image.png

【F1】查看历史记录,来快速切换资源。

进入【DevOps工程】,创建一个工程。

image.png

点击工程,进入工程内部。

image.png

进入【工程管理】-【凭证】,创建代码仓库(如图gitlab-account)、镜像仓库(如图harbor-id)、sonar(如图sonar-token)、k8s集群相关凭证。

image.png

其中gitlab和harbor的凭证都采用账号密码类型,k8s集群的凭证类型为kubeconfig,sonar的凭证为秘密文本,需要登录sonar,生成token,如下图。

image.png

进入【流水线】,创建流水线。
image.png

若代码仓库中有Jenkinsfile,则可指定代码仓库,会自动识别流水线。

编辑Jenkinsfile,如下:

pipeline {
  agent {
    node {
      label 'general'
    }
  }
  environment {
    GITHUB_CREDENTIAL_ID = 'github-id'
    KUBECONFIG_CREDENTIAL_ID = 'demo-kubeconfig'
    REGISTRY = 'harbor.com'
    HARBOR_PRO = 'public'
    APP_NAME = 'demo'
    SONAR_CREDENTIAL_ID = 'sonar-token'
  }
  stages {
    stage('SCM') {
      steps {
        git(url: 'you project url', credentialsId: 'gitlab-account', branch: 'dev', changelog: true, poll: false)
      }
    }
    stage('Code Analysis') {
      steps {
        container('general') {
          withCredentials([string(credentialsId : 'snoar-token' ,variable : 'SONAR_TOKEN' ,)]) {
            withSonarQubeEnv('sonar') {
              sh 'sonar-scanner -Dsonar.projectKey=$APP_NAME -Dsonar.sources=. -Dsonar.host.url=you project url -Dsonar.token=$SONAR_TOKEN'
            }
          }
          timeout(unit: 'HOURS', activity: true, time: 1) {
            waitForQualityGate 'true'
          }
        }
      }
    }
    stage('Build and Push') {
      steps {
        container('general') {
          sh 'docker build -f Dockerfile -t $REGISTRY/$HARBOR_PRO/$APP_NAME:SNAPSHOT-$BUILD_NUMBER .'
          withCredentials([usernamePassword(credentialsId : 'harbor-id' ,passwordVariable : 'DOCKER_PASSWORD' ,usernameVariable : 'DOCKER_USERNAME' ,)]) {
            sh 'echo "$DOCKER_PASSWORD" | docker login $REGISTRY -u "$DOCKER_USERNAME" --password-stdin'
            sh 'docker push $REGISTRY/$HARBOR_PRO/$APP_NAME:SNAPSHOT-$BUILD_NUMBER'
          }
        }
      }
    }
    stage('Deploy to Dev') {
      steps {
        kubernetesDeploy(enableConfigSubstitution: true, deleteResource: false, kubeconfigId: 'demo-kubeconfig', configs: 'deploy/dev/**')
      }
    }
  }
}
查看原文

赞 0 收藏 0 评论 0

这杯可乐有点甜 发布了文章 · 3月1日

【kubesphere】自定义jenkins agent

背景

kubesphere流水线自带的agent只有四类:base、maven、nodejs、go,当需要构建其他框架的项目,就需要自定义jenkins agent了。

准备工作

采用官方的 docker.io/kubesphere/builder-base:v2.1.0 作为基础镜像,在此之上,安装jdk和sonnar scanner cli,构建代码扫描环境。

使用如下Dockerfile构建用于打包的基础镜像:

FROM docker.io/kubesphere/builder-base:v2.1.0

RUN mkdir /usr/local/java /opt/sonar-scanner

# copy the jdk  archive to the image,and it will automaticlly unzip the tar file
ADD jdk-8u181-linux-x64.tar.gz /usr/local/java/

# make a symbol link
RUN ln -s /usr/local/java/jdk1.8.0_181 /usr/local/java/jdk

# set environment variables
ENV JAVA_HOME /usr/local/java/jdk
ENV JRE_HOME ${JAVA_HOME}/jre
ENV CLASSPATH .:${JAVA_HOME}/lib:${JRE_HOME}/lib
ENV PATH ${JAVA_HOME}/bin:$PATH

COPY sonar-scanner-cli-4.6.0.2311-linux /opt/sonar-scanner

RUN ln -s /opt/sonar-scanner/bin/sonar-scanner /usr/sbin

将Dockerfile置于一个空目录即可,下载JDK和sonnar-scanner的压缩包放到目录下,其中sonnar-scanner需要解压,然后打包并推送:

docker build -t general:v1.0 .
docker tag general:v1.0 xxx.com/general:v1.0
docker push xxx.com/general:v1.0

配置jenkins agent

登录kubesphere,进入【配置中心】-【配置】,搜索 jenkins-casc-config ,修改配置。
image.png

在go的描述下添加如下:

          - name: "general"
            namespace: "kubesphere-devops-system"
            label: "general"
            nodeUsageMode: "EXCLUSIVE"
            idleMinutes: 0
            containers:
            - name: "general"
              image: "xxx.com/public/general:v1.0" # 镜像地址
              command: "cat"
              args: ""
              ttyEnabled: true
              resourceRequestCpu: "100m"
              resourceLimitCpu: "4000m"
              resourceRequestMemory: "100Mi"
              resourceLimitMemory: "8192Mi"
            - name: "jnlp"
              image: "jenkins/jnlp-slave:3.27-1"
              command: "jenkins-slave"
              args: "^${computer.jnlpmac} ^${computer.name}"
              resourceRequestCpu: "50m"
              resourceRequestMemory: "400Mi"
              resourceLimitMemory: "1536Mi"
            workspaceVolume:
              emptyDirWorkspaceVolume:
                memory: false
            volumes:
            - hostPathVolume:
                hostPath: "/var/run/docker.sock"
                mountPath: "/var/run/docker.sock"
            - hostPathVolume:
                hostPath: "jenkins_general_cache"
                mountPath: "/home/jenkins/general/pkg"
            - hostPathVolume:
                hostPath: "sonar_cache"
                mountPath: "/root/.sonar/cache"
            yaml: "spec:\r\n  affinity:\r\n    nodeAffinity:\r\n      preferredDuringSchedulingIgnoredDuringExecution:\r\n      - weight: 1\r\n        preference:\r\n          matchExpressions:\r\n          - key: node-role.kubernetes.io/worker\r\n            operator: In\r\n            values:\r\n            - ci\r\n  tolerations:\r\n  - key: \"node.kubernetes.io/ci\"\r\n    operator: \"Exists\"\r\n    effect: \"NoSchedule\"\r\n  - key: \"node.kubernetes.io/ci\"\r\n    operator: \"Exists\"\r\n    effect: \"PreferNoSchedule\"\r\n  containers:\r\n  - name: \"general\"\r\n    resources:\r\n      requests:\r\n        ephemeral-storage: \"1Gi\"\r\n      limits:\r\n        ephemeral-storage: \"10Gi\"\r\n  securityContext:\r\n    fsGroup: 1000\r\n "

已将相关镜像上传到dockerhub,仓库为 leksas/kubesphere-sonnar-scanner:v1

使用

在流水线中,编辑Jenkinsfile如下:

pipeline {
  agent {
    node {
      label 'general'
    }

  }
  stages {
    stage('SCM') {
      steps {
        git(url: 'your project url', credentialsId: 'gitlab-account', branch: 'dev', changelog: true, poll: false)
      }
    }
    stage('Code Analysis') {
      steps {
        container('general') {
          withCredentials([string(credentialsId : 'snoar-token' ,variable : 'SONAR_TOKEN' ,)]) {
            withSonarQubeEnv('sonar') {
              sh 'sonar-scanner -Dsonar.projectKey=your project name -Dsonar.sources=. -Dsonar.host.url=your sonnar server url -Dsonar.token=$SONAR_TOKEN'
            }
          }

          timeout(unit: 'HOURS', activity: true, time: 1) {
            waitForQualityGate 'true'
          }

        }

      }
    }
  }
}

对比参考链接中的方案,该镜像集成了sonnar scanner,任何语言都可以使用此agent去调用sonnarqube执行代码扫描。

相关链接:
JDK1.8下载链接
sonar-scanner-cli-4.6.0.2311下载链接

参考链接:
https://kubesphere.com.cn/for...

查看原文

赞 0 收藏 0 评论 0

这杯可乐有点甜 发布了文章 · 3月1日

【kubesphere】某个node上rsyslogd进程占用特别高的内存

背景

使用kubesphere搭建了一个三节点的集群,多次对服务组件进行安装卸载,后面发现有台node内存占用特别高。

处理过程

在linux上top看内存主要被rsyslogd进程占用,最高占用72%。

查看rsyslog相关的日志,如/var/log/kern.log。提示有个tcp连接异常,端口是9200,联想到是服务组件中的logging,里面有elasticsearch,推测是pod异常了。

Mar  1 10:28:12 node2 kernel: [1551913.020125] net_ratelimit: 3 callbacks suppressed
Mar  1 10:28:12 node2 kernel: [1551913.020128] IPVS: rr: TCP 10.233.48.51:9200 - no destination available
Mar  1 10:28:12 node2 kernel: [1551913.020795] IPVS: rr: TCP 10.233.48.51:9200 - no destination available
Mar  1 10:28:12 node2 kernel: [1551913.021425] IPVS: rr: TCP 10.233.48.51:9200 - no destination available
Mar  1 10:28:13 node2 kernel: [1551914.015619] IPVS: rr: TCP 10.233.48.51:9200 - no destination available
Mar  1 10:28:14 node2 kernel: [1551914.204103] IPVS: rr: TCP 10.233.48.51:9200 - no destination available
Mar  1 10:28:14 node2 kernel: [1551915.036109] IPVS: rr: TCP 10.233.48.51:9200 - no destination available
Mar  1 10:28:14 node2 kernel: [1551915.036583] IPVS: rr: TCP 10.233.48.51:9200 - no destination available
Mar  1 10:28:14 node2 kernel: [1551915.037133] IPVS: rr: TCP 10.233.48.51:9200 - no destination available
Mar  1 10:28:16 node2 kernel: [1551917.044257] IPVS: rr: TCP 10.233.48.51:9200 - no destination available
Mar  1 10:28:16 node2 kernel: [1551917.066199] IPVS: rr: TCP 10.233.48.51:9200 - no destination available

logging组件已经被我移除了,但是查看kubesphere-logging-system下还有许多pod,于是进入项目管理页面,手动将项目kubesphere-logging-system删除。

image.png

发现项目一直在删除中,推测是pvc的关系,查看/var/log/syslog,提示volume异常。

Mar  1 11:05:00 node2 kubelet[10994]: E0301 11:05:00.355639   10994 kubelet_volumes.go:154] orphaned pod "e27b6657-8de2-476f-ba9b-5e7347ebc170" found, but volume subpaths are still present on disk : There were a total of 2 errors similar to this. Turn up verbosity to see them.

进入/var/lib/kubelet/pods目录,cat e27b6657-8de2-476f-ba9b-5e7347ebc170/etc-hosts,查看hosts。

# Kubernetes-managed hosts file.
127.0.0.1       localhost
::1     localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
fe00::0 ip6-mcastprefix
fe00::1 ip6-allnodes
fe00::2 ip6-allrouters
10.233.96.245   elasticsearch-logging-discovery-0.elasticsearch-logging-master.kubesphere-logging-system.svc.cluster.local      elasticsearch-logging-discovery-0

查看所有pod的ip,kubectl get pods -A -o wide | grep 10.233.96.245,发现不存在10.233.96.245这个IP的pod,确认目录是之前的pod遗留下来的,于是删除掉。

再次查看内存,发现内存使用率还是没有降下来。于是将rsyslog重启,内存降下来了。

总结

1.kubesphere对服务组件的管理还不是很完善,会出现删除不掉服务组件的情况,后续建议可以采用开关的形式来管理服务组件。

2.内存占用高,定位到内存后,就不知道怎么去定位具体的原因,还需要进一步学习。

查看原文

赞 0 收藏 0 评论 0

这杯可乐有点甜 发布了文章 · 2月28日

【kubesphere】devops遇到的问题记录

1.流水线中为什么很多时候要指定容器?

image.png

指定容器实际上是指定流水线步骤运行的位置,即将此步骤放在这个容器里面运行,比如调用sonarqube进行代码扫描,需要使用到maven,故第一步需指定容器maven,否则会提示找不到命令mvn。

参考链接:https://kubesphere.com.cn/doc...

2.参照官方文档,在使用maven调用sonarqube时,出现sonar登陆失败,是因为官方文档写错了,文档中先添加凭证token,而在命令中使用login(即账号密码,所以权限验证失败)。

image.png

需要调整成token,后面一截是指定java代码的路径,根据需要补充。

image.png

3.执行代码扫描,发现一直在进行扫描,停不下来,是因为在jenkins上没有配置sonarqube server,读取不到完成的状态导致。在http://jenkins.com/configure...

image.png

4.将代码部署到k8s集群失败,报错:services ks-sample-dev is forbidden: User xx cannot get resource services in API group in the namespace kubesphere-sample-dev。

先确认是否创建了namespace kubesphere-sample-dev,若未创建,则创建对应的namespace。若创建了,需要用admin用户在项目管理中,将kubesphere-sample-dev分配给企业空间和项目管理员才行。

image.png

5.在Jenkinsfile中添加了environment,若再去编辑图形化的流水线并保存,会导致environment消失。

注:若非必要,不要去更新kubesphere里面jenkins的plugin,不然jenkins可能会崩溃掉,然后就需要重新安装服务组件devops,重装后之前的流水线还会在的。

查看原文

赞 0 收藏 0 评论 0

这杯可乐有点甜 发布了文章 · 2月27日

【jenkins】k8s的CICD流程设计

前言

在jenkins的基础上,设计CICD流程。具体流程如下:

  1. 拉取代码
  2. 代码扫描
  3. 构建镜像并推送到仓库
  4. 部署到k8s
  5. 消息通知

一、流程说明

1.1 环境说明

两套k8s环境,分为开发测试环境(dev)和生产环境(pro),同时,镜像仓库也分为两套。两套环境都能连接上git和jenkins。
注:dev和pro需在物理上进行隔离。

1.2 流程

需创建两条流水线:
dev流水线:研发编码完成后,将代码提交到仓库,触发构建流程,先进行代码扫描,再生成镜像并推送到dev仓库,自动部署到开发测试环境。
所有功能测试验证通过后。
pro流水线:运维手动触发流水线,将dev仓库的镜像推送到pro仓库,部署到线上环境。
注:上线前需考虑预发布,比如蓝绿部署,金丝雀部署等,后续再进行完善。

二、项目结构

创建一个新工程,以单体flask应用为例,需要包含以下文件。
├── Dockerfile # 镜像构建文件
├── deploy
│   ├── dev # dev环境部署文件
│   └── pro # pro环境部署文件
└── tests

三、kubesphere权限管理

在k8s上安装kubesphere,用于权限管理。
层次分为 企业空间--项目

五、FAQ

1.每次流水线都需要重新创建jenkins agent,比较慢。

查看原文

赞 0 收藏 0 评论 0

这杯可乐有点甜 发布了文章 · 2月23日

【k8s】故障排查之named端口占用导致localdns起不来

背景

由于k8s集群的资源不足,将部分服务器关机扩容再启动,发现部分pod一直没有起来。

排查过程

查看pod的日志,发现解析集群内的域名失败,推测是dns的问题。

查看dns相关的pod,发现nodelocaldns一直在重启。

root@master1:~# k get pods --all-namespaces | grep dns
kube-system                    coredns-74d59cc5c6-9brnf                            1/1     Running                 0          15d
kube-system                    coredns-74d59cc5c6-g46rf                            1/1     Running                 0          15d
kube-system                    nodelocaldns-bwnml                                  1/1     Running                 0          15d
kube-system                    nodelocaldns-f8tmj                                  0/1     CrashLoopBackOff        2926       12d
kube-system                    nodelocaldns-rtngg                                  0/1     CrashLoopBackOff        44         15d

登录对应的node,netstat -ntple | grep 53查看53端口的占用情况,发现被named进程占用。
image.png

将named进程kill掉,在/lib/systemd/system目录下定位到是bind9服务开机自启动,并将其禁用掉,完成修复工作。

root@node1:/lib/systemd/system# grep -rn named ./
./bind9-pkcs11.service:3:Documentation=man:named(8)
./bind9-pkcs11.service:8:Environment=KRB5_KTNAME=/etc/bind/named.keytab
./bind9-pkcs11.service:10:ExecStart=/usr/sbin/named-pkcs11 -f -u bind
./bind9-resolvconf.service:3:Documentation=man:named(8) man:resolvconf(8)
./bind9-resolvconf.service:11:ExecStart=/bin/sh -c 'echo nameserver 127.0.0.1 | /sbin/resolvconf -a lo.named'
./bind9-resolvconf.service:12:ExecStop=/sbin/resolvconf -d lo.named
./systemd-hostnamed.service:12:Documentation=man:systemd-hostnamed.service(8) man:hostname(5) man:machine-info(5)
./systemd-hostnamed.service:13:Documentation=https://www.freedesktop.org/wiki/Software/systemd/hostnamed
./systemd-hostnamed.service:16:ExecStart=/lib/systemd/systemd-hostnamed
./bind9.service:3:Documentation=man:named(8)
./bind9.service:10:ExecStart=/usr/sbin/named -f $OPTIONS
root@node1:/lib/systemd/system# systemctl disable bind9
Synchronizing state of bind9.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install disable bind9
查看原文

赞 0 收藏 0 评论 0

这杯可乐有点甜 发布了文章 · 2月23日

【k8s集群】搭建步骤

由于k8s计划在v1.20后弃用docker(指容器运行时,而非docker容器),故计划采用containerd作为容器运行时。

一、安装containerd和crictl

1.1 名词解释
runc:根据OCI规范来生成和运行容器的命令行工具。
containerd:容器运行时
crictl:k8s的命令行工具

1.2 安装步骤

# 1.  安装 runc
curl -OL https://github.com/opencontainers/runc/releases/download/v1.0.0-rc92/runc.amd64
mv runc.amd64 /usr/local/bin/runc && chmod +x /usr/local/bin/runc

# 2. 安装 containerd
curl -OL https://github.com/containerd/containerd/releases/download/v1.4.3/containerd-1.4.3-linux-amd64.tar.gz
tar -zxvf containerd-1.4.3-linux-amd64.tar.gz -C /usr/local
curl -o /etc/systemd/system/containerd.service https://raw.githubusercontent.com/containerd/cri/master/contrib/systemd-units/containerd.service

# 3. 配置 containerd
mkdir -p /etc/containerd
cat > /etc/containerd/config.toml << EOF
[plugins]
  [plugins."io.containerd.grpc.v1.cri"]
    sandbox_image = "kubesphere/pause:3.2"
    [plugins."io.containerd.grpc.v1.cri".registry]
      [plugins."io.containerd.grpc.v1.cri".registry.mirrors]
        [plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]
          endpoint = ["https://registry-1.docker.io"]     ## 这里可替换成dockerhub的镜像加速器
EOF
systemctl enable containerd && systemctl restart containerd

# 4. 安装 crictl
VERSION="v1.19.0"
curl -OL https://github.com/kubernetes-sigs/cri-tools/releases/download/$VERSION/crictl-$VERSION-linux-amd64.tar.gz
sudo tar zxvf crictl-$VERSION-linux-amd64.tar.gz -C /usr/local/bin
rm -f crictl-$VERSION-linux-amd64.tar.gz

# 5. 配置crictl
cat > /etc/crictl.yaml << EOF
runtime-endpoint: unix:///run/containerd/containerd.sock
image-endpoint: unix:///run/containerd/containerd.sock
timeout: 2
debug: false
pull-image-on-create: false
EOF

二、部署k8s和kubesphere

# 1. 下载kubekey
## 这里暂时使用kubekey v1.1.0-alpha.1部署kubernetes集群,该版本为预览版,支持多container-runtime也会包含在后续的正式版本中。
curl -OL https://github.com/kubesphere/kubekey/releases/download/v1.1.0-alpha.1/kubekey-v1.1.0-alpha.1-linux-amd64.tar.gz
tar -zxvf  kubekey-v1.1.0-alpha.1-linux-amd64.tar.gz
# 2. 创建配置文件 
./kk create config     # 默认在同级目录下生成 config-sample.yaml    
# 3. 根据真实环境信息修改配置文件
vi config-sample.yaml  

apiVersion: kubekey.kubesphere.io/v1alpha1
kind: Cluster
metadata:
  name: sample
spec:
  hosts:
  - {name: node1, address: 192.168.6.3, internalAddress: 192.168.6.3, password: xxx}
  - {name: node2, address: 192.168.6.4, internalAddress: 192.168.6.4, password: xxx}
  roleGroups:
    etcd:
    - node1
    master: 
    - node1
    worker:
    - node1
    - node2
  controlPlaneEndpoint:
    domain: lb.kubesphere.local
    address: ""
    port: 6443
  kubernetes:
    version: v1.17.9
    imageRepo: kubesphere
    clusterName: cluster.local
    containerManager: containerd    ## 这里填入之前部署的container-runtime:containerd / crio / isula
  network:
    plugin: calico
    kubePodsCIDR: 10.233.64.0/18
    kubeServiceCIDR: 10.233.0.0/18
  registry:
    registryMirrors: []
    insecureRegistries: []
  addons: []

# 4. 部署集群
./kk create cluster -f config-sample.yaml  --with-kubesphere

# 5. 等待集群部署完成

注:kubesphere默认账号密码是admin/P@88w0rd

参考链接:https://kubesphere.com.cn/for...

查看原文

赞 0 收藏 0 评论 0

这杯可乐有点甜 发布了文章 · 2月23日

【ceph】搭建注意事项

搭建参考文档

ceph的搭建可以参考如下中文官方文档。
http://docs.ceph.org.cn/

名词解析

osd:object storage drive,主要功能是存储数据、复制数据、平衡数据、恢复数据等,与其它OSD间进行心跳检查等,并将一些变化情况上报给Ceph Monitor。

data、object、pg、osd、disk的关系
image.png

注意事项

1.如何搭建高可用集群?
ceph集群一般采用3台或5台机器进行搭建,3台都部署osd存储和mon监控,其他一台部署mgr管理。
网络上采用多网络配置,分为cluster network和public network。如下图所示:
image.png

2.如何根据osd数和副本数设置pg的数量?
One pool total PGs = (Total_number_of_OSD * 100) / max_replication_count

3.文件系统选型?
推荐使用XFS。

测试

1.故障测试
随机关闭部分机器,测试功能是否正常
2.性能测试
比如iops

参考链接:
http://docs.ceph.org.cn/

查看原文

赞 0 收藏 0 评论 0

这杯可乐有点甜 发布了文章 · 2020-09-06

Linux之rx_length_errors

给线上环境的linux安装监控后,告警HostNetworkReceiveErrors。

netstat -ni查看网卡,RX-ERR有86w,存在大量rx错误。

image.png

进入/sys/class/net/ens18/statistics/,逐个查看,发现是rx_length_errors

image.png

查看原文

赞 1 收藏 1 评论 2

认证与成就

  • 获得 6 次点赞
  • 获得 4 枚徽章 获得 0 枚金徽章, 获得 0 枚银徽章, 获得 4 枚铜徽章

擅长技能
编辑

开源项目 & 著作
编辑

(゚∀゚ )
暂时没有

注册于 2017-09-05
个人主页被 715 人浏览