Я хочу развернуть Jenkins на k8s (просто)
Я хочу развернуть Jenkins на k8s (просто)

официальный адрес

Официальный сайт Jenkins развернут на кластере k8s.

1. Подготовка окружающей среды

Подготовьте кластер k8s. Я не буду здесь это подробно показывать. О подготовке кластера k8s можно прочитать в другом моем посте.

еще один пост

2. Напишите файл yaml.

1) Создайте пространство имен

Язык кода:txt
копировать
kubectl создать пространство имен DevOps
вопрос командования,Очень просто,Вы также можете писать файлы yaml,Слишком лень писать

2) Создать управление сертификацией

Язык кода:txt
копировать
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: jenkins-admin
rules:
  - apiGroups: [""]
    resources: ["*"]
    verbs: ["*"]
---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: jenkins-admin
  namespace: devops
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: jenkins-admin
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: jenkins-admin
subjects:
- kind: ServiceAccount
  name: jenkins-admin
  namespace: devops

Краткое введение: Вышеупомянутые ресурсы создают аутентифицированного клиента.

ClusterRole определяет набор разрешений, которые имеют полные разрешения для всех групп и ресурсов API.

ServiceAccount, который представляет приложение или компонент и имеет токен для доступа к API Kubernetes в кластере.

ClusterRoleBinding привязывает ранее определенный ServiceAccount с именем «jenkins-admin» к ClusterRole с именем «jenkins-admin», так что ServiceAccount имеет все разрешения для работы с API Kubernetes. В то же время этот ServiceAccount может быть назван только в «devops». Доступ к ресурсам внутри пространства.

3) Создайте монтируемый том

Язык кода:txt
копировать
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: local-storage
provisioner: kubernetes.io/no-provisioner
volumeBindingMode: WaitForFirstConsumer
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: jenkins-pv-volume
  labels:
    type: local
spec:
  storageClassName: local-storage
  claimRef:
    name: jenkins-pv-claim
    namespace: devops
  capacity:
    storage: 10Gi
  accessModes:
    - ReadWriteOnce
  local:
    path: /mnt/jenkins

  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - key: kubernetes.io/hostname
          operator: In
          values:
          - k8s-node1               ## Измените здесь имя узла вашего собственного k8, kubectl get nodes
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: jenkins-pv-claim
  namespace: devops
spec:
  storageClassName: local-storage
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 3Gi
Язык кода:txt
копировать
Инструкции по настройке монтируемого тома
####Ресурс StorageClass##########

provisioner: Поставщики, которые определяют классы хранения, то есть то, как тома хранения предоставляются приложениям. Значение здесь kubernetes.io/no-provisioner, указывающий, что для этого класса хранилища не требуются дополнительные поставщики динамических томов.
volumeBindingMode: Определяет режим привязки тома, т. е. способ подключения тома к Pod Сделайте привязку. Значение здесь WaitForFirstConsumer означает, что до тех пор, пока первый потребитель не будет использовать том Pod До того как это произойдет, том не будет привязан ни к какому узлу.




#######PersistentVolume#########

storageClassName: local-storage: укажите имя класса хранилища. Здесь используется класс хранилища «local-storage».

претензияRef: которые утверждают, что этот постоянный том востребован (Persistent Volume Претензия) использована.


емкость: Выделите емкость для этого постоянного тома.

storage: 10Gi: выделите 10Gi дискового пространства.

accessModes: Укажите режим доступа к хранилищу.

ReadWriteOnce: Разрешен только доступ в режиме чтения-записи к одному узлу.
local: Укажите тип хранилища как локальное хранилище.

path: /mnt/jenkins: укажите путь к постоянному тому как «/mnt/jenkins».

nodeAffinity: Укажите привязку узла, то есть этот постоянный том будет развернут только в определенном Kubernetes. Узел узла.

required: Указывает, что требуется привязка узла.

nodeSelectorTerms: Сопоставление на основе селектора узла.

matchExpressions: Соответствующее выражение, используемое для указания узла этого постоянного тома.

key: kubernetes.io/hostname: укажите соответствующее имя ключа «kubernetes.io/hostname».
operator: In: укажите режим соответствия «in».

значения:: Укажите соответствующие значения.

k8s-node1: соответствует Kubernetes с именем «k8s-node1». Узел узла.


pvcНечего объяснять,Общие конфигурации,Привяжите соответствующий PV на основе выделенного хранилища.

4) Создайте ресурсы развертывания

Язык кода:txt
копировать
apiVersion: apps/v1
kind: Deployment
metadata:
  name: jenkins
  namespace: devops
spec:
  replicas: 1
  selector:
    matchLabels:
      app: jenkins-server
  template:
    metadata:
      labels:
        app: jenkins-server
    spec:
      securityContext:
            fsGroup: 1000
            runAsUser: 1000
      serviceAccountName: jenkins-admin
      containers:
        - name: jenkins
          image: jenkins/jenkins:2.369       #Просто используйте это для зеркала. Версия 2.369. Зеркальная версия официального документа слишком низкая. Похоже, это версия 2.2, и она не поддерживает некоторые плагины.
          imagePullPolicy: IfNotPresent
#          resources:
#            limits:
#              memory: "2Gi"
#              cpu: "1000m"
#            requests:
#              memory: "500Mi"
#              cpu: "500m"
          ports:
            - name: httpport
              containerPort: 8080
            - name: jnlpport
              containerPort: 50000
#          livenessProbe:
#            httpGet:
#              path: "/login"
#              port: 8080
#            initialDelaySeconds: 90
#            periodSeconds: 10
#            timeoutSeconds: 5
#            failureThreshold: 5
#          readinessProbe:
 #           httpGet:
 #             path: "/login"
  #            port: 8080
 #           initialDelaySeconds: 60
 #           periodSeconds: 10
 #           timeoutSeconds: 5
 #           failureThreshold: 3
          volumeMounts:
            - name: jenkins-data
              mountPath: /var/jenkins_home   #Это рабочий каталог jenkins. Просто смонтируйте его, чтобы данные не были потеряны при перезапуске jenkins.
      volumes:
        - name: jenkins-data
          persistentVolumeClaim:
              claimName: jenkins-pv-claim

5) Создать сервисные ресурсы

Язык кода:txt
копировать
apiVersion: v1
kind: Service
metadata:
  name: jenkins-service
  namespace: devops
  annotations:
      prometheus.io/scrape: 'true'    #Этот абзац включен в официальный документ. Он используется, чтобы позволить Прометею (Прометею) идентифицировать модуль, но вы можете пока оставить его в покое.
      prometheus.io/path:   /
      prometheus.io/port:   '8080'
spec:
  selector:
    app: jenkins-server
  type: NodePort
  ports:
    - name: http
      port: 8080
      targetPort: 8080
      nodePort: 32000
    - name: agent
      port: 50000
      targetPort: 50000
      nodePort: 50000
Язык кода:txt
копировать
Вы сказали, что ваш порт 50000 не установлен, и вы не спросите Baidu? Пересечение Пересечение Пересечение
vim /etc/kubernetes/manifests/kube-apiserver.yaml


apiVersion: v1
kind: Pod
metadata:
  annotations:
    kubeadm.kubernetes.io/kube-apiserver.advertise-address.endpoint: 10.0.0.120:6443
  creationTimestamp: null
  labels:
    component: kube-apiserver
    tier: control-plane
  name: kube-apiserver
  namespace: kube-system
spec:
  containers:
  - command:
    - kube-apiserver
    - --service-node-port-range=3000-55000      #Эта строка не включена по умолчанию. Добавьте ее самостоятельно. Диапазон портов объяснять не нужно.
    - --advertise-address=10.0.0.120
    - --allow-privileged=true
    - --authorization-mode=Node,RBAC
    - --client-ca-file=/etc/kubernetes/pki/ca.crt
    - --enable-admission-plugins=NodeRestriction
    - --enable-bootstrap-token-auth=true
    - --etcd-cafile=/etc/kubernetes/pki/etcd/ca.crt
    - --etcd-certfile=/etc/kubernetes/pki/apiserver-etcd-client.crt



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

6) Стартовые ресурсы

Язык кода:txt
копировать
Файлы YAML могут быть размещены в одном каталоге.
kubectl применить -f .

7) Доступ к Дженкинсу

Язык кода:txt
копировать
Проверьте, нормально ли запускается модуль
Проверьте, нормально ли запускается ресурс svc

Вы можете видеть, что ресурс запустился нормально.

Модуль развертывается на узле 1 и имеет прямой доступ к IP+порту узла 1.

Появление этого веб-интерфейса доказывает, что развертывание Jenkins прошло успешно.

Пароль можно получить, просмотрев журнал модуля.

Скопировать ввод пароля

Установите эти два языка

Ожидание установки

Создать пользователя

Таким образом, jenkins настраивается в кластере k8s.

успех

Созданные 111 файлов находятся в рабочей области в каталоге монтирования.

boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose