Обзор: недавно я использую 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-config7 Отправка почты в 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-{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}"""