Практика устранения неполадок KubeSphere

Kubernetes
Практика устранения неполадок KubeSphere

Обзор: недавно я использую QingCloud Kubesphere с отличным пользовательским интерфейсом, частным развертыванием, без зависимостей от инфраструктуры, без зависимостей от Kubernetes, поддерживает развертывание на физических машинах, виртуальных машинах и облачных платформах, а также может управлять кластером Kubernetes разных версий и производителей. Верхний уровень k8s инкапсулирован для реализации контроля разрешений на основе ролей, конвейер DevOPS быстро реализует CI/CD, а также встроены общие инструменты, такие как гавань/gitlab/jenkins/sonarqube. Основанный на OpenPitrix, он обеспечивает полный жизненный цикл управление приложениями, включая разработку, тестирование. Опыт операций, связанных с приложениями, таких как публикация, обновление и исключение из списка, по-прежнему очень хорош. Кроме того, как проект с открытым исходным кодом, неизбежно наличие некоторых ошибок.Я столкнулся со следующими идеями по устранению неполадок в своем собственном использовании.Я очень благодарен за техническую помощь, предоставленную сообществом qingcloud.Если вы заинтересованы в k8s, вы можете испытайте внутреннюю платформу, которая гладкая, как шелк.Опыт, пользователи ранчера также могут прийти и испытать это.

Контейнер, очищающий статус выхода

После того, как кластер проработает в течение определенного периода времени, некоторые контейнеры выходят из Exited из-за ненормального состояния, и им необходимо вовремя очистить и освободить диск, что можно установить как выполнение запланированной задачи.

docker rm `docker ps -a |grep Exited |awk '{print $1}'`

2. Очистите ненормальные или выселенные модули

  • Очистить под ns системы kubesphere-devops
kubectl delete pods -n kubesphere-devops-system $(kubectl get pods -n kubesphere-devops-system |grep Evicted|awk '{print $1}')
kubectl delete pods -n kubesphere-devops-system $(kubectl get pods -n kubesphere-devops-system |grep CrashLoopBackOff|awk '{print $1}')
  • Чтобы облегчить очистку, укажите ns для очистки выселенных/crashloopbackoff модулей/очистки вышедших контейнеров.
#!/bin/bash
# auth:kaliarch

clear_evicted_pod() {
  ns=$1
  kubectl delete pods -n ${ns} $(kubectl get pods -n ${ns} |grep Evicted|awk '{print $1}')
}
clear_crash_pod() {
  ns=$1
  kubectl delete pods -n ${ns} $(kubectl get pods -n ${ns} |grep CrashLoopBackOff|awk '{print $1}')
}
clear_exited_container() {
  docker rm `docker ps -a |grep Exited |awk '{print $1}'`
}


echo "1.clear exicted pod"
echo "2.clear crash pod"
echo "3.clear exited container"
read -p "Please input num:" num


case ${num} in 
"1")
  read -p "Please input oper namespace:" ns
  clear_evicted_pod ${ns}
  ;;


"2")
  read -p "Please input oper namespace:" ns
  clear_crash_pod ${ns}
  ;;
"3")
  clear_exited_container
  ;;
"*")
  echo "input error"
  ;;
esac
  • Очистить все pod'ы, выселенные/crashloopbackoff в ns
# 获取所有ns
kubectl get ns|grep -v "NAME"|awk '{print $1}'

# 清理驱逐状态的pod
for ns in `kubectl get ns|grep -v "NAME"|awk '{print $1}'`;do kubectl delete pods -n ${ns} $(kubectl get pods -n ${ns} |grep Evicted|awk '{print $1}');done
# 清理异常pod
for ns in `kubectl get ns|grep -v "NAME"|awk '{print $1}'`;do kubectl delete pods -n ${ns} $(kubectl get pods -n ${ns} |grep CrashLoopBackOff|awk '{print $1}');done

Три Перенос данных докера

В процессе установки директория данных docker не указана, а системный диск 50G.Со временем диска не хватает.Необходимо перенести данные docker и использовать метод мягкого подключения: Желательно смонтировать новый диск в каталог /data

systemctl stop docker

mkdir -p /data/docker/  

rsync -avz /var/lib/docker/ /data/docker/  

mv /var/lib/docker /data/docker_bak

ln -s /data/docker /var/lib/

systemctl daemon-reload

systemctl start docker

Устранение неполадок в сети Four Kubesphere

  • Описание проблемы:

На узле node или мастер-ноде kubesphere вручную запустить контейнер, а в контейнере не удается подключить публичную сеть. Что-то не так с моей конфигурацией? Раньше я использовал calico по умолчанию, но теперь я не могу изменить его на Fluannel.Развернуть pod в деплойменте в kubesphere Контейнер может выйти в публичную сеть, но доступ к публичной сети невозможен при ручном запуске ноды или мастера в одиночку.

Просмотрите docker0 в сети контейнеров, запущенной вручную.


root@fd1b8101475d:/# ip a

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1

    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

    inet 127.0.0.1/8 scope host lo

       valid_lft forever preferred_lft forever

2: tunl0@NONE: <NOARP> mtu 1480 qdisc noop state DOWN group default qlen 1

    link/ipip 0.0.0.0 brd 0.0.0.0

105: eth0@if106: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 

    link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0

    inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0

       valid_lft forever preferred_lft forever

Контейнерная сеть в модулях использует kube-ipvs0.


1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1

    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

    inet 127.0.0.1/8 scope host lo

       valid_lft forever preferred_lft forever

2: tunl0@NONE: <NOARP> mtu 1480 qdisc noop qlen 1

    link/ipip 0.0.0.0 brd 0.0.0.0

4: eth0@if18: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue

    link/ether c2:27:44:13:df:5d brd ff:ff:ff:ff:ff:ff

    inet 10.233.97.175/32 scope global eth0

       valid_lft forever preferred_lft forever
  • решение:

Просмотр конфигурации запуска докера

图片描述

Измените файл /etc/systemd/system/docker.service.d/docker-options.conf, чтобы удалить параметр: --iptables=false Когда этот параметр равен false, iptables не будет записываться

[Service]
Environment="DOCKER_OPTS=  --registry-mirror=https://registry.docker-cn.com --data-root=/var/lib/docker --log-opt max-size=10m --log-opt max-file=3 --insecure-registry=harbor.devops.kubesphere.local:30280"

Пять исключений маршрутизации приложений kubesphere

Вход маршрутизации приложения в kubesphere использует nginx, а конфигурация в веб-интерфейсе приведет к тому, что два хоста будут использовать один и тот же сертификат ca, который можно настроить через файл комментариев.

⚠️ Примечание. Развертывание элементов управления входом в:

图片描述

kind: Ingress
apiVersion: extensions/v1beta1
metadata:
  name: prod-app-ingress
  namespace: prod-net-route
  resourceVersion: '8631859'
  labels:
    app: prod-app-ingress
  annotations:
    desc: 生产环境应用路由
    nginx.ingress.kubernetes.io/client-body-buffer-size: 1024m
    nginx.ingress.kubernetes.io/proxy-body-size: 2048m
    nginx.ingress.kubernetes.io/proxy-read-timeout: '3600'
    nginx.ingress.kubernetes.io/proxy-send-timeout: '1800'
    nginx.ingress.kubernetes.io/service-upstream: 'true'
spec:
  tls:
    - hosts:
        - smartms.tools.anchnet.com
      secretName: smartms-ca
    - hosts:
        - smartsds.tools.anchnet.com
      secretName: smartsds-ca
  rules:
    - host: smartms.tools.anchnet.com
      http:
        paths:
          - path: /
            backend:
              serviceName: smartms-frontend-svc
              servicePort: 80
    - host: smartsds.tools.anchnet.com
      http:
        paths:
          - path: /
            backend:
              serviceName: smartsds-frontend-svc

              servicePort: 80

Шесть агентов jenkins обновления kubesphere

Пользователи могут использовать разные языковые версии или разные версии инструментов в своих собственных сценариях использования. Этот документ в основном описывает, как заменить встроенный агент.

В образе базовой сборки по умолчанию нет инструмента сонар-сканер.Каждый агент Kubesphere Jenkins является Pod.Если вы хотите заменить встроенный агент, вам необходимо заменить соответствующий образ агента.

Соберите последнюю версию образа агента kubesphere/builder-base:advanced-1.0.0.

Обновите указанный пользовательский образ: ccr.ccs.tencentyun.com/testns/base:v1

Ссылка на ссылку:Cry besphere.IO/docs/adv нажмите C…

图片描述
图片描述

После того, как KubeSphere изменит jenkins-casc-config, вам необходимо перезагрузить обновленную конфигурацию системы на странице конфигурации-как-кода в разделе управления системой Jenkins Dashboard.

Ссылаться на:

Cry besphere.IO/docs/adv нажмите C…

图片描述
Обновить базовое изображение в jenkins

图片描述
⚠️ Сначала измените конфигурацию jenkins в kubesphere,jenkins-casc-config

7 Отправка почты в DevOps

Ссылаться на:woohoo.cloud bees.com/blog/ купил - да…

Встроенные переменные:

имя переменной объяснять
BUILD_NUMBER The current build number, such as "153"
BUILD_ID The current build ID, identical to BUILD_NUMBER for builds created in 1.597+, but a YYYY-MM-DD_hh-mm-ss timestamp for older builds
BUILD_DISPLAY_NAME The display name of the current build, which is something like "#153" by default.
JOB_NAME Name of the project of this build, such as "foo" or "foo/bar". (To strip off folder paths from a Bourne shell script, try: ${JOB_NAME##*/})
BUILD_TAG String of "jenkins-{JOB_NAME}-{BUILD_NUMBER}". Convenient to put into a resource file, a jar file, etc for easier identification.
EXECUTOR_NUMBER Уникальный номер, который идентифицирует текущего исполнителя (среди исполнителей на одной машине), который выполняет эту сборку. Это номер, который вы видите в «статусе исполнителя сборки», за исключением того, что номер начинается с 0, а не с 1.
NODE_NAME Name of the slave if the build is on a slave, or "master" if run on master
NODE_LABELS Whitespace-separated list of labels that the node is assigned.
WORKSPACE The absolute path of the directory assigned to the build as a workspace.
JENKINS_HOME The absolute path of the directory assigned on the master node for Jenkins to store data.
JENKINS_URL Full URL of Jenkins, like http://server:port/jenkins/ (note: only available if Jenkins URL set in system configuration)
BUILD_URL Full URL of this build, like http://server:port/jenkins/job/foo/15/ (Jenkins URL must be set)
SVN_REVISION Subversion revision number that's currently checked out to the workspace, such as "12345"
SVN_URL Subversion URL that's currently checked out to the workspace.
JOB_URL Full URL of this job, like http://server:port/jenkins/job/foo/ (Jenkins URL must be set)

Наконец, я написал шаблон, подходящий для моего собственного бизнеса, который можно использовать напрямую.

mail to: 'xuel@net.com',
          charset:'UTF-8', // or GBK/GB18030
          mimeType:'text/plain', // or text/html
          subject: "Kubesphere ${env.JOB_NAME} [${env.BUILD_NUMBER}] 发布正常Running Pipeline: ${currentBuild.fullDisplayName}",
          body: """
          ---------Anchnet Devops Kubesphere Pipeline job--------------------


          项目名称 : ${env.JOB_NAME}
          构建次数 : ${env.BUILD_NUMBER}
          扫描信息 : 地址:${SONAR_HOST}
          镜像地址 : ${REGISTRY}/${QHUB_NAMESPACE}/${APP_NAME}:${IMAGE_TAG}
          构建详情:SUCCESSFUL: Job ${env.JOB_NAME} [${env.BUILD_NUMBER}]
          构建状态 : ${env.JOB_NAME} jenkins 发布运行正常
          构建URL : ${env.BUILD_URL}"""

图片描述

图片描述