Я хочу развернуть 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
Проблема со входом в Docker: невозможно подключиться к Docker Hub
boy illustration
Установите докер на виртуальной машине CentOS
boy illustration
Контейнерное путешествие программистов в облако в 2024 году. Эпизод 1: Пересечение границ
boy illustration
Инфраструктура как код (IaC): будущее автоматизированного управления инфраструктурой
boy illustration
Как создать онлайн-банк вопросов для тестов и помочь пользователям бесплатно формировать статьи и тесты.
boy illustration
Корпоративная практика Traefik: внедрение Traefik на производственном уровне
boy illustration
Каковы основные модели обслуживания облачных вычислений? Каковы их характеристики?
boy illustration
Дополнительные правила поощрения Роспотребнадзора на 22 марта
boy illustration
Анализ и лечение причин вирусов-вымогателей и майнинга на серверах
boy illustration
Hexo -26- Бесплатное ускорение CDN CloudFlare
boy illustration
Разница между традиционным хранилищем и объектным хранилищем
boy illustration
Использование хост-порта и хост-сети в Kubernetes
boy illustration
Учебное пособие о том, как создать частный сервер Palworld одним щелчком мыши
boy illustration
[Зона легкого облачного игрового сервера] Как продлить срок действия игрового сервера и вернуть деньги за него?
boy illustration
Исследование и практика реального бизнес-производства и применения GBI (генеративная бизнес-аналитика)
boy illustration
Перейти в облако государственных активов или облако по делам правительства? Безопасное облако зависит от оценки облака
boy illustration
Поговорим о ситуационной осведомленности с нуля
boy illustration
Внедрение промежуточного программного обеспечения универсального хранилища файлов через протокол S3.
boy illustration
Поймите управление продукцией в одной статье: от теоретических норм, практического применения до безопасности цепочки поставок.
boy illustration
Feiniu fnos использует Docker для развертывания учебника по iptv-источникам
boy illustration
RDMA — принцип проектирования подкачки по требованию ODP, преимущества и анализ исходного кода
boy illustration
Этот вычислительный кластер, выпущенный Goose Factory, может обучать большие модели с триллионами параметров за самые быстрые 4 дня.
boy illustration
[Техническая посадка] Дабл Одиннадцать! Приближается большая волна скидок на создание веб-сайтов, почему бы не прийти сюда, чтобы создать веб-сайт?
boy illustration
[Представление сообщества] Реализация шлюза k8s на основе Pingora, практика кода (1)
boy illustration
Стратегия создания веб-сайтов IIS на облачном сервере Сколько веб-сайтов может создать облачный сервер?
boy illustration
Cloud Native использует Docker для развертывания личной навигационной страницы на домашней странице.
boy illustration
Разработка приложения HarmonyOS | HarmonyOS Next-анализ всего процесса от разработки приложения до запуска
boy illustration
Поделитесь хорошим местом для загрузки оригинального iso-файла server2025 от Microsoft.
boy illustration
Feiniu fnos использует Docker для развертывания онлайн-офисного пакета для совместной работы с открытым исходным кодом onlyoffice
boy illustration
Комплексная оценка мощного и простого в использовании программного обеспечения для офлайн-заметок: преимущества, недостатки, сравнение