使用 kubeadm 來創建一個單 master 節點的 kubernets 集群
kubeadm init --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=192.168.20.11
查看節點狀態和 pod 都已經正常
kubectl get pod -A
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system coredns-f9fd979d6-9t6qp 1/1 Running 0 89s
kube-system coredns-f9fd979d6-hntm8 1/1 Running 0 89s
kube-system etcd-jenkins 1/1 Running 0 106s
kube-system kube-apiserver-jenkins 1/1 Running 0 106s
kube-system kube-controller-manager-jenkins 1/1 Running 0 106s
kube-system kube-proxy-8pzkz 1/1 Running 0 89s
kube-system kube-scheduler-jenkins 1/1 Running 0 89s
去除 master 節點上的污點,允許其他的 pod 調度在 master 節點上,不然后面 Jenkins 所創建的 pod 將無法調度在該節點上。
kubectl taint nodes $(hostname) node-role.kubernetes.io/master:NoSchedule-
建議使用docker-compose來部署。運行在kubernetes集群集群中也沒什么毛病,但是將Jenkins master獨立于kubernetes集群部署比較方便.
docker-compose.yaml:
version: 3.6
services:
jenkins:
image: jenkins/jenkins:2.263.4-lts-slim
container_name: jenkins
restart: always
volumes:
- ./jenkins_home:/var/jenkins_home
network_mode: host
user: root
environment:
- JAVA_OPTS=-Duser.timezone=Asia/Shanghai
使用docker-compose up來啟動,成功啟動后會提示,日志輸出的密鑰就是admin用戶的默認密碼,使用它來第一次登錄 Jenkins。
登錄上去之后,建議選擇 “選擇插件” 來安裝,盡可能少地安裝插件,按需安裝即可。在Jenkins的插件管理那里安裝上kubernetes插件。
接下來開始配置Jenkin與kubernetes
配置 kubernets 的地方是在 系統管理 > 節點管理 > Configure Clouds。點擊 Add a new cloud,來添加一個 kubernetes 集群。
在 Jenkins 的憑據那里添加上 kubeconfig 文件,憑據的類型選擇為 Secret file,然后將上面使用 kubeadm 部署生成的 kubeconfig 上傳到這里。
點擊連接測試,如果提示 Connected to Kubernetes v1.19.8 就說明已經成功連接上了 kubernetes 集群。
流水線 Jenkinsfile,下面是一個簡單的任務,用于構建 webp-server-go 項目的 docker 鏡像。
// Kubernetes pod template to run.
def JOB_NAME = "${env.JOB_NAME}"
def BUILD_NUMBER = "${env.BUILD_NUMBER}"
def POD_NAME = "jenkins-${JOB_NAME}-${BUILD_NUMBER}"
podTemplate(
# 這里定義 pod 模版
)
{ node(POD_NAME) {
container(JOB_NAME) {
stage("Build image") {
sh """#!/bin/bash
git clone https://github.com/webp-sh/webp_server_go /build
cd /build
docker build -t webps:0.3.2-rc.1 .
"""
}
}
}
}
pod 模版如下,將模板的內容復制粘貼到上面的 Jenkinsfile 中。在容器中構建鏡像,使用 dind 的方案:將 pod 所在宿主機的 docker sock 文件掛載到 pod 的容器內,pod 容器內只要安裝好 docker-cli 工具就可以像宿主機那樣直接使用 docker 了。
podTemplate(
cloud: "kubernetes",
namespace: "default",
name: POD_NAME,
label: POD_NAME,
yaml: """
apiVersion: v1
kind: Pod
spec:
containers:
- name: ${JOB_NAME}
image: "debian:buster-docker"
imagePullPolicy: IfNotPresent
tty: true
volumeMounts:
- name: dockersock
mountPath: /var/run/docker.sock
- name: jnlp
args: ["$(JENKINS_SECRET)", "$(JENKINS_NAME)"]
image: "jenkins/inbound-agent:4.3-4-alpine"
imagePullPolicy: IfNotPresent
volumes:
- name: dockersock
hostPath:
path: /var/run/docker.sock
""",
)
構建 debian:buster-docker 鏡像,使用它來在 pod 的容器內構建 docker 鏡像,使用的 Dockerfile 如下:
FROM debian:buster
RUN apt update
&& apt install -y --no-install-recommends
vim
curl
git
make
ca-certificates
gnupg
&& rm -rf /var/lib/apt/lists/*
RUN curl -fsSL "https://download.docker.com/linux/debian/gpg" | apt-key add -qq - >/dev/null
&& echo "deb [arch=amd64] https://download.docker.com/linux/debian buster stable" > /etc/apt/sources.list.d/docker.list
&& apt update -qq
&& apt-get install -y -qq --no-install-recommends docker-ce-cli
&& rm -rf /var/lib/apt/lists/*
定義好 jenkinsfile 文件并且構建好 pod 模板中的鏡像后,接下來開始使用它來創建流水線任務。
在 Jenkins 上新建一個任務,選擇任務的類型為 流水線
將定義好的 Jenkinsfile 內容復制粘貼到流水線定義 Pipeline script 中并點擊保存。在新建好的 Job 頁面點擊 立即構建 來運行流水線任務。
在 kubernetes 集群的機器上使用 kubectl 命令查看 pod 是否正常 Running
kubectl get pod
NAME READY STATUS RESTARTS AGE
jenkins-webps-9-bs78x-5x204 2/2 Running 0 66s
更多精彩干貨分享
點擊下方名片關注
IT那活兒
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/129801.html
摘要:基于年底或年初沒有推廣的現狀,唯品會部門目前已經做了兩年的時間。唯品會現狀唯品會目前線上有一千多個域,每個域之間相互的依賴比較復雜,每次的部署發布困難。這是唯品會的架構,主要包含持續集成和持續部署。 數人云上海&深圳兩地容器之Mesos/K8S/Swarm三國演義的嘉賓精彩實錄第三更來啦。唯品會是數人云Meetup的老朋友,去年曾做過RPC服務框架和Mesos容器化的分享。本次分享中,...
摘要:擴展性好當集群的資源嚴重不足而導致排隊等待時,可以很容易的添加一個到集群中,從而實現擴展。用法,選擇盡可能使用這個節點鏡像,填寫,這個容器鏡像是我們的運行環境。更新文件,這里我們只是將中的鏡像更換成最新構建出的鏡像。基于Jenkins的CI/CD實踐[TOC]一、概要提到K8S環境下的CI/CD,可以使用的工具有很多,比如Jenkins、Gitlab CI、新興的drone等,考慮到大多公司...
摘要:一個小服務器加本地一個閑置從機撐進去這么多東西很顯然爆了,于是把拆出來,用上了公共的云服務容器鏡像服務。使用對集群外暴露服務這里使用的是在中部署有官方部署手冊,基本按著走一遍就能部署上去了。 基于kubernetes+docker+jenkins的DevOps實踐 之前自己的項目開發就搭了個cicd的環境,那時候是在本就小的可憐的服務器上搭了一套 jenkins + docker...
摘要:一個小服務器加本地一個閑置從機撐進去這么多東西很顯然爆了,于是把拆出來,用上了公共的云服務容器鏡像服務。使用對集群外暴露服務這里使用的是在中部署有官方部署手冊,基本按著走一遍就能部署上去了。 基于kubernetes+docker+jenkins的DevOps實踐 之前自己的項目開發就搭了個cicd的環境,那時候是在本就小的可憐的服務器上搭了一套 jenkins + docker...
摘要:嘗試運行腳本發生了的錯誤。錯誤信息接下來就是,天的調查,關于這個錯誤的能查到的資料幾乎沒有,也嘗試了很多方法,無果非常煎熬。問題解決了參考文檔初試使用完成持續構建與發布集群安全配置 背景 為了使用Kubernetes管理并自動化部署應用程序,領導糾結了幾個同事搭了一個Kubernetes集群環境。不過,為了減少復雜度,采用了非官方推薦的方式: API Server使用http方式 不...
摘要:在集群的使用過程中,初學者可能會碰到這樣的怪異問題在一個集群里,部署服務用的私有鏡像倉庫,如的時候,只有個別的服務是部署成功的,其他都是部署失敗的,錯誤的原因就是鏡像拉取失敗,如下 在k8s集群的使用過程中,初學者可能會碰到這樣的(怪異)問題: 在一個k8s集群里,部署服務(用的私有鏡像倉庫,如harbor)的時候,只有個...
閱讀 1353·2023-01-11 13:20
閱讀 1699·2023-01-11 13:20
閱讀 1211·2023-01-11 13:20
閱讀 1904·2023-01-11 13:20
閱讀 4161·2023-01-11 13:20
閱讀 2751·2023-01-11 13:20
閱讀 1397·2023-01-11 13:20
閱讀 3664·2023-01-11 13:20