欧美free性护士vide0shd,老熟女,一区二区三区,久久久久夜夜夜精品国产,久久久久久综合网天天,欧美成人护士h版

首頁綜合 正文
目錄

柚子快報(bào)邀請碼778899分享:運(yùn)維 Devops

柚子快報(bào)邀請碼778899分享:運(yùn)維 Devops

http://yzkb.51969.com/

一、devops介紹

軟件開發(fā)最開始是由兩個(gè)團(tuán)隊(duì)組成:

開發(fā)計(jì)劃由開發(fā)團(tuán)隊(duì)從頭開始設(shè)計(jì)和整體系統(tǒng)的搭建,需要系統(tǒng)不停的迭代更新。運(yùn)維團(tuán)隊(duì)將開發(fā)團(tuán)隊(duì)的Code進(jìn)行測試后部署上線,希望系統(tǒng)穩(wěn)定安全運(yùn)行。

這看似兩個(gè)目標(biāo)不同的團(tuán)隊(duì)需要協(xié)同完成一個(gè)軟件的開發(fā)。

在開發(fā)團(tuán)隊(duì)指定好計(jì)劃完成coding后,需要提供到運(yùn)維團(tuán)隊(duì)。

運(yùn)維團(tuán)隊(duì)向開發(fā)團(tuán)隊(duì)反饋需要修復(fù)的BUG以及一些需要返工的任務(wù)。

這時(shí)開發(fā)團(tuán)隊(duì)需要經(jīng)常等待運(yùn)維團(tuán)隊(duì)的反饋,這無疑延長了事件并推遲了整個(gè)軟件開發(fā)的周期。

會(huì)有一種方式,在開發(fā)團(tuán)隊(duì)等待的時(shí)候,讓開發(fā)團(tuán)隊(duì)轉(zhuǎn)移到下一個(gè)項(xiàng)目中,等待運(yùn)維團(tuán)隊(duì)之前的代碼提供反饋。

可是這樣就意味著一個(gè)完整的項(xiàng)目需要一個(gè)更長的周期才能開發(fā)出最終代碼。

基于現(xiàn)在的互聯(lián)網(wǎng)現(xiàn)狀,更推崇敏捷式開發(fā),這樣就導(dǎo)致項(xiàng)目的迭代速度更快,但是由于開發(fā)團(tuán)隊(duì)與運(yùn)維團(tuán)隊(duì)的溝通問題,會(huì)導(dǎo)致新版本上線的時(shí)間成本很高,這又違背的敏捷式開發(fā)的最初的目的。

那么如果讓開發(fā)團(tuán)隊(duì)和運(yùn)維團(tuán)隊(duì)整合到成一個(gè)團(tuán)隊(duì),協(xié)同應(yīng)對一套軟件呢?這就被稱為DevOps。

DevOps,字面意思是Development & Operations的縮寫,就是運(yùn)維&開發(fā)。

雖然字面意思只涉及到了開發(fā)團(tuán)隊(duì)合運(yùn)維團(tuán)隊(duì),其實(shí)QA測試團(tuán)隊(duì)也是參與其中的。

網(wǎng)上可以查看到DevOps的符號(hào)類似于一個(gè)無窮大的符號(hào)

這表明DevOps是一個(gè)不斷提高效率并且持續(xù)不斷工作的過程

DevOps的方式可以讓公司能夠更快地應(yīng)對更新和市場發(fā)展變化,開發(fā)可以快速交付,部署也更加穩(wěn)定。

核心就在于簡化Dev和Ops團(tuán)隊(duì)之間德流程,使整體軟件開發(fā)過程更快速。

整體的軟件開發(fā)流程:

PLAN:開發(fā)團(tuán)隊(duì)根據(jù)客戶的目標(biāo)制定開發(fā)計(jì)劃。CODE:根據(jù)PLAN開始編碼過程,需要將不同版本的代碼存儲(chǔ)在一個(gè)庫中。BUILD:編碼完成后,需要將代碼構(gòu)建并運(yùn)行。TEST:成功構(gòu)建項(xiàng)目后,需要測試代碼是否存在BUG或錯(cuò)誤。DEPLOY:代碼經(jīng)過手動(dòng)測試和自動(dòng)化測試后,認(rèn)定代碼已經(jīng)準(zhǔn)備好部署并且交給運(yùn)維團(tuán)隊(duì)。OPERATE:運(yùn)維團(tuán)隊(duì)將代碼部署到生產(chǎn)環(huán)境中。MONITOR:項(xiàng)目部署上線后,需要持續(xù)的監(jiān)控產(chǎn)品。INTEGRATE:然后將監(jiān)控階段收到的反饋發(fā)送回PLAN階段,整體反復(fù)的流程就是DevOps的核心,即持續(xù)即成,持續(xù)部署。

為了保證整體流程可以高效的完成,各個(gè)階段都有比較常見的工具,如下圖:

這表明DevOps是一個(gè)不斷提高效率并且持續(xù)不斷工作的過程

DevOps的方式可以讓公司能夠更快地應(yīng)對更新和市場發(fā)展變化,開發(fā)可以快速交付,部署也更加穩(wěn)定。

核心就在于簡化Dev和Ops團(tuán)隊(duì)之間德流程,使整體軟件開發(fā)過程更快速。

整體的軟件開發(fā)流程:

PLAN:開發(fā)團(tuán)隊(duì)根據(jù)客戶的目標(biāo)制定開發(fā)計(jì)劃。CODE:根據(jù)PLAN開始編碼過程,需要將不同版本的代碼存儲(chǔ)在一個(gè)庫中。BUILD:編碼完成后,需要將代碼構(gòu)建并運(yùn)行。TEST:成功構(gòu)建項(xiàng)目后,需要測試代碼是否存在BUG或錯(cuò)誤。DEPLOY:代碼經(jīng)過手動(dòng)測試和自動(dòng)化測試后,認(rèn)定代碼已經(jīng)準(zhǔn)備好部署并且交給運(yùn)維團(tuán)隊(duì)。OPERATE:運(yùn)維團(tuán)隊(duì)將代碼部署到生產(chǎn)環(huán)境中。MONITOR:項(xiàng)目部署上線后,需要持續(xù)的監(jiān)控產(chǎn)品。INTEGRATE:然后將監(jiān)控階段收到的反饋發(fā)送回PLAN階段,整體反復(fù)的流程就是DevOps的核心,即持續(xù)即成,持續(xù)部署。

為了保證整體流程可以高效的完成,各個(gè)階段都有比較常見的工具,如下圖:

最終可以給DevOps下一個(gè)定義:DevOps強(qiáng)調(diào)的使是高效組織團(tuán)隊(duì)之間如何通過自動(dòng)化的工具協(xié)作和溝通來完成軟件的生命周期,從而更快,更頻繁的交付更穩(wěn)定的軟件。

二、準(zhǔn)備環(huán)境

1、安裝jdk

本次我們安裝的是JDK11是因?yàn)閖enkins新版本最低要求是11

jdk下載地址:https://download.oracle.com/otn/java/jdk/11.0.24%2B7/21cffd70ff1e41a3a5ef9898f46e442d/jdk-11.0.24_linux-x64_bin.tar.gz

把下載的jdk上傳到服務(wù)器

[root@jenkins ~]# mkdir -p /opt/environment

[root@jenkins ~]# tar -zxvf jdk-11.0.24_linux-x64_bin.tar.gz -C /opt/environment/

配置jdk環(huán)境變量

[root@jenkins ~]# vim /etc/profile

添加到最后

# Set java environment

JAVA_HOME=/opt/environment/jdk-11.0.24

PATH=$PATH:$JAVA_HOME/bin

export JAVA_HOME PATH

[root@jenkins ~]# source /etc/profile

[root@jenkins ~]# java -version

java version "11.0.24" 2024-07-16 LTS

Java(TM) SE Runtime Environment 18.9 (build 11.0.24+7-LTS-271)

Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.24+7-LTS-271, mixed mode)

2、 安裝Maven

# 下載Maven

[root@jenkins ~]# wget https://archive.apache.org/dist/maven/maven-3/3.8.8/binaries/apache-maven-3.8.8-bin.tar.gz

# 解壓Maven

[root@jenkins ~]# tar -zxvf apache-maven-3.8.8-bin.tar.gz -C /opt/environment

# 配置jar包存放位置

[root@jenkins ~]# vim /opt/environment/apache-maven-3.8.8/conf/settings.xml

# 在55行添加

/opt/environment/apache-maven-3.8.8/repository

因?yàn)閙aven的默認(rèn)依賴下載地址是國外的maven官方地址,下載依賴的時(shí)候可能下載過慢甚至下載失敗,所以我們需要將下載地址改為國內(nèi)的阿里云地址,找到?mirrors?標(biāo)簽,然后在下面新增一個(gè)?mirror?配置項(xiàng),加入代碼:

alimaven

aliyun maven

https://maven.aliyun.com/repository/public

central

# 配置Maven環(huán)境變量

[root@jenkins ~]# vim /etc/profile

文件最后添加

# Set maven environment

MAVEN_HOME=/opt/environment/apache-maven-3.8.8

PATH=$PATH:$MAVEN_HOME/bin

export MAVEN_HOME PATH

生效一下

[root@jenkins ~]# source /etc/profile

?3、安裝docker

# 下載docker的安裝包

wget https://download.docker.com/linux/static/stable/x86_64/docker-20.10.7.tgz

[root@jenkins ~]# tar -zxvf docker-20.10.7.tgz

[root@jenkins ~]# mv docker/* /usr/bin

[root@jenkins ~]# rm -rf docker-20.10.7.tgz

[root@jenkins ~]# rm -rf docker

# system管理docker

cat > /usr/lib/systemd/system/docker.service << EOF

[Unit]

Description=Docker Application Container Engine

Documentation=https://docs.docker.com

After=network-online.target firewalld.service

Wants=network-online.target

[Service]

Type=notify

ExecStart=/usr/bin/dockerd

ExecReload=/bin/kill -s HUP $MAINPID

LimitNOFILE=infinity

LimitNPROC=infinity

LimitCORE=infinity

TimeoutStartSec=0

Delegate=yes

KillMode=process

Restart=on-failure

StartLimitBurst=3

StartLimitInterval=60s

[Install]

WantedBy=multi-user.target

EOF

配置鏡像地址:不能配置阿里的,我使用的阿里的鏡像加速是不行了

[root@jenkins ~]# mkdir -p /etc/docker

tee /etc/docker/daemon.json <<-'EOF'

{

"registry-mirrors": [

"https://do.nark.eu.org",

"https://dc.j8.work",

"https://docker.m.daocloud.io",

"https://dockerproxy.com",

"https://docker.mirrors.ustc.edu.cn",

"https://docker.nju.edu.cn"

]

}

EOF

[root@jenkins ~]# systemctl daemon-reload

[root@jenkins ~]# systemctl start docker && systemctl enable docker

4、安裝git

[root@jenkins ~]# yum -y install git

5、安裝jenkins

這次我準(zhǔn)備的是最新穩(wěn)定版的jenkins下載地址,根據(jù)官方文檔顯示,最新的穩(wěn)定版本支持的最低jdk版本為jdk11,所以這也是之前要安裝jdk11的原因:

# 下載依賴

[root@jenkins ~]# yum install -y fontconfig

# 下載安裝包

[root@jenkins ~]# wget https://mirrors.jenkins.io/redhat-stable/jenkins-2.401.2-1.1.noarch.rpm

# 創(chuàng)建jenkins工作目錄

[root@jenkins ~]# mkdir -p /opt/server/jenkins

[root@jenkins ~]# mv jenkins-2.401.2-1.1.noarch.rpm /opt/server/jenkins/

[root@jenkins ~]# cd /opt/server/jenkins/

[root@jenkins jenkins]# rpm -ivh jenkins-2.401.2-1.1.noarch.rpm

# 修改jenkins的Javahome

vim /usr/lib/systemd/system/jenkins.service

51行

修改啟動(dòng)用戶不然會(huì)有權(quán)限問題

vim /usr/lib/systemd/system/jenkins.service

設(shè)置用戶數(shù)組

[root@jenkins jenkins]# chown -R root:root /var/lib/jenkins/ && chown -R root:root /var/cache/jenkins/ && chown -R root:root /var/log/jenkins/

[root@jenkins jenkins]# systemctl daemon-reload

[root@jenkins jenkins]# systemctl start jenkins

[root@jenkins jenkins]# systemctl enable jenkins

6、初始化jenkins

根據(jù)提示查看密碼

安裝?

安裝完成后我們需要?jiǎng)?chuàng)建第一個(gè)管理員用戶,按照提示填寫內(nèi)容后我們直接點(diǎn)擊保存并完成

然后來到j(luò)enkins主頁

點(diǎn)擊Manage Jenkins然后點(diǎn)擊Plugins,我們需要在安裝一些插件

搜索:

Git ParameterMaven Integration

?設(shè)置jdk

我們繼續(xù)忘下面找找到Maven的配置地方點(diǎn)擊新增Maven

點(diǎn)擊系統(tǒng)配置

選擇環(huán)境變量

應(yīng)用,保存

先點(diǎn)擊應(yīng)用,在點(diǎn)擊保存,到這里就初始化完成了。

7、準(zhǔn)備JAVA項(xiàng)目

注意pom文件的true

一定要?jiǎng)h除或者注釋掉

完整的pom文件

xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">

4.0.0

com.greateme

Devops

0.0.1-SNAPSHOT

Devops

Devops

1.8

UTF-8

UTF-8

2.6.13

org.springframework.boot

spring-boot-starter-web

org.springframework.boot

spring-boot-starter-test

test

org.springframework.boot

spring-boot-dependencies

${spring-boot.version}

pom

import

org.springframework.boot

spring-boot-maven-plugin

2.6.13

${artifactId}

org.apache.maven.plugins

maven-compiler-plugin

3.8.1

1.8

1.8

UTF-8

org.springframework.boot

spring-boot-maven-plugin

${spring-boot.version}

com.greateme.devops.DevopsApplication

repackage

repackage

訪問測試

8、準(zhǔn)備gitlab

GitLab最少4內(nèi)存,4CPU,不然帶不起來

上傳軟件包

# 安裝依賴

[root@gitlab ~]# yum install -y curl policycoreutils openssh-server openssh-clients postfix policycoreutils-python cronie

# 安裝

[root@gitlab ~]# rpm -ivh gitlab-ce-12.0.2-ce.0.el7.x86_64.rpm

# 配置訪問地址

[root@gitlab ~]# vim /etc/gitlab/gitlab.rb

# 修改完重啟gitlab

[root@gitlab ~]# gitlab-ctl reconfigure

?登錄gitlab

日志位置:/var/log/gitlab 可以進(jìn)去查看訪問日志以及報(bào)錯(cuò)日志等,供訪問查看以及異常排查。

gitlab-ctl tail #查看所有日志

gitlab-ctl tail nginx/gitlab_access.log #查看nginx訪問日志

關(guān)閉 gitlab: # gitlab-ctl stop

啟動(dòng) gitlab: # gitlab-ctl start

重啟 gitlab: # gitlab-ctl restart

gitlab 主配置文件:/etc/gitlab/gitlab.rb #可以自定義一些郵件服務(wù)等

日志地址:/var/log/gitlab/ #對應(yīng)各服務(wù)

服務(wù)地址:/var/opt/gitlab/ #對應(yīng)各服務(wù)的主目錄

倉庫地址:/var/opt/gitlab/git-data #記錄項(xiàng)目倉庫等提交信息

9、漢化Gitlab

我們這里安裝的是v12版本的gitlab,下載v12的漢化包(注:版本要對應(yīng))

https://gitlab.com/xhang/gitlab/-/archive/12-0-stable/gitlab-12-0-stable-zh.tar.gz

[root@gitlab ~]# tar -zxvf gitlab-12-0-stable-zh.tar.gz

# 停止gitlab

[root@gitlab ~]# gitlab-ctl stop

# 開始漢化

[root@gitlab ~]# \cp -rf gitlab-12-0-stable-zh/* /opt/gitlab/embedded/service/gitlab-rails/

# 開啟gitlab

[root@gitlab ~]# gitlab-ctl restart

關(guān)閉注冊功能

Save changes

配置郵箱報(bào)警

[root@gitlab ~]# vim /etc/gitlab/gitlab.rb #57行后添加以下內(nèi)容

gitlab_rails['smtp_enable'] = true

gitlab_rails['smtp_address'] = "smtp.163.com" #SMTP服務(wù)器

gitlab_rails['smtp_port'] = 465

gitlab_rails['smtp_user_name'] = "guoweijiemail@163.com" #郵箱賬號(hào)

gitlab_rails['smtp_password'] = "nihao123" #客戶端授權(quán)碼,注意:此為163郵箱設(shè)置的客戶端授權(quán)碼,授權(quán)碼是用于登錄第三方郵件客戶端的專用密碼。

gitlab_rails['smtp_authentication'] = "login"

gitlab_rails['smtp_enable_starttls_auto'] = true

gitlab_rails['smtp_tls'] = true

gitlab_rails['gitlab_email_from'] = '你的郵箱' #發(fā)郵件的郵箱地址

# 重載gitlab

[root@gitlab ~]# gitlab-ctl reconfigure

# 登錄郵件控制臺(tái)

[root@gitlab ~]# gitlab-rails console

Notify.test_email('guoweijiemail@163.com','test','hello world').deliver_now

創(chuàng)建群組

創(chuàng)建一個(gè)用戶

將新建的用戶添加到組里

?去郵箱設(shè)置密碼

用新用戶登錄,并創(chuàng)建項(xiàng)目

?10、用idea項(xiàng)目連接gitlab

在idea的控制臺(tái)

PS D:\Java-code\Devops> git init

PS D:\Java-code\Devops> git remote add origin http://192.168.1.11/guoweijie/devops.git

PS D:\Java-code\Devops> git add --all

PS D:\Java-code\Devops> git config --global user.email "guoweijiemail@163.com"

PS D:\Java-code\Devops> git config --global user.name "guoweijie"

PS D:\Java-code\Devops> git commit -m 'init commit'

PS D:\Java-code\Devops> git push origin master

# 生成密鑰

PS D:\Java-code\Devops> ssh-keygen -t rsa 一路回車

?11、創(chuàng)建dockerfile

首先需要在pom.xml文件中定義jar包的規(guī)范

執(zhí)行package

看到package的名字

?創(chuàng)建dockerfile文件

dockerfile文件

# 使用openjdk11做基礎(chǔ)鏡像

FROM openjdk:11-jre

# 作者

MAINTAINER gwjcloud

# 將可執(zhí)行的jar包放到容器當(dāng)中去

ADD java/Devops.jar app.jar

# 暴露8080端口

EXPOSE 8080

# JVM 調(diào)優(yōu)參數(shù)

ENV JAVA_OPTION="-Dfile.encoding=UTF-8 -XX:+UseParallelGC -XX:+PrintGCDetails -Xloggc:/var/log/devops-example.gc.log -XX:+HeapDumpOnOutOfMemoryError -XX:+DisableExplicitGC"

# JVM 內(nèi)存默認(rèn)值

ENV XMX=128m

ENV MXS=128m

ENV XMN=64m

# 運(yùn)行程序

ENTRYPOINT ["sh", "-c", "java -Djava.security.egd=file:/dev/./urandom -jar -Xmx${XMX} -Xms${MXS} -Xmn${XMN} $JAVA_OPTION /app.jar"]

?12、生成ssh-key

[root@jenkins ~]# git config --global user.name "gwjcloud"

[root@jenkins ~]# git config --global user.email "gwjcloud@163.com"

[root@jenkins ~]# ssh-keygen -t rsa -C "JenkinsServer"

查看公鑰

[root@jenkins ~]# cat .ssh/id_rsa.pub

然后把內(nèi)容配置到gitlab上面

在jenkins服務(wù)器上面測試,是否能免密碼拉取代碼

[root@jenkins ~]# git clone git@192.168.1.11:guoweijie/devops.git

[root@jenkins ~]# ls

anaconda-ks.cfg devops

可以看到?jīng)]問題的

13、創(chuàng)建jenkinsfile

pipeline {

agent any

stages {

stage('Hello') {

steps {

echo 'Hello World'

}

}

}

}

14、創(chuàng)建流水線

參數(shù)化構(gòu)建過程——git參數(shù)

15、提交代碼并打tag

推送并提交

PS D:\Java-code\devops> git tag -a v1.0.0 -m "New Version"

PS D:\Java-code\devops> git push origin v1.0.0

打開gitlab看一下tag

?打開jenkins頁面點(diǎn)擊

Build with Parameters

?看構(gòu)建過程

三、流水線構(gòu)建

切換到我們指定的版本通過maven構(gòu)建項(xiàng)目將構(gòu)建好的maven項(xiàng)目打成Docker鏡像推送Docker鏡像到鏡像倉庫通過遠(yuǎn)程連接部署到Kubernetes上面

1、jenkinsfile切換代碼倉庫到指定版本

最下面找到流水線語法

選擇checkout: Check out from version control

點(diǎn)擊生成流水線腳本會(huì)出現(xiàn)腳本

打開開發(fā)工具Idea,修改Jenkinsfile文件

把上面的改成Checkout From Git

中間的是生成的流水線腳本

2、通過Maven構(gòu)建項(xiàng)目

繼續(xù)使用腳本生成器來生成腳本,按照提示并

選擇:sh: Shell Script

mvn clean package -Dmaven.test.skip

mkdir docker/java

mv target/Devops.jar docker/java

mvn clean

?修改Jenkinsfile

pipeline {

agent any

stages {

stage('Checkout From Git') {

steps {

checkout scmGit(branches: [[name: '${tag}']], extensions: [], userRemoteConfigs: [[url: 'git@192.168.1.11:guoweijie/devops.git']])

}

}

stage('Build By Maven'){

steps {

sh '''mvn clean package -Dmaven.test.skip

mkdir docker/java

mv target/Devops.jar docker/java

mvn clean'''

}

}

}

}

?提交一下代碼

打開Jenkins測試一下

3、使用阿里云鏡像倉庫來構(gòu)建鏡像

首先我們需要將Docker倉庫準(zhǔn)備好,來到阿里云新建一個(gè)倉庫,選擇個(gè)人實(shí)例

?創(chuàng)建命名空間

創(chuàng)建鏡像倉庫

?創(chuàng)建RAM用戶來使容器鏡像服務(wù)

添加權(quán)限

使用RAM賬戶登錄阿里云,并開通容器鏡像服務(wù)

在jenkins服務(wù)器上面執(zhí)行登錄阿里云的docker Registry

繼續(xù)使用jenkins的腳本生成器來生成腳本

cd docker

docker build -t registry.cn-hangzhou.aliyuncs.com/devops-gwjcloud/devops-example:${tag}

rm -rf java

在Jenkinsfile中新增一個(gè)階段Build By Docker 將生成的腳本復(fù)制進(jìn)去

pipeline {

agent any

stages {

stage('Checkout From Git') {

steps {

checkout scmGit(branches: [[name: '${tag}']], extensions: [], userRemoteConfigs: [[url: 'git@192.168.1.11:guoweijie/devops.git']])

}

}

stage('Build By Maven'){

steps {

sh '''mvn clean package -Dmaven.test.skip

mkdir docker/java

mv target/Devops.jar docker/java

mvn clean'''

}

}

stage('Build By Docker'){

steps {

sh '''cd docker

docker build -t registry.cn-hangzhou.aliyuncs.com/devops-gwjcloud/devops-example:${tag} .

rm -rf java'''

}

}

}

}

提交代碼略

用find找到pip腳本創(chuàng)建的java目錄,把他刪除,不然會(huì)報(bào)錯(cuò)的

開始jenkins構(gòu)建

可以看到logs有鏡像生成

jenkins服務(wù)器查看鏡像

?4、將鏡像推送到阿里云倉庫

docker push registry.cn-hangzhou.aliyuncs.com/devops-gwjcloud/devops-example:${tag}

docker rmi -f registry.cn-hangzhou.aliyuncs.com/devops-gwjcloud/devops-example:${tag}

在jenkins服務(wù)中添加

推送gitlab略

刪除鏡像

?記得在jenkins服務(wù)器上登錄

?再次構(gòu)建

?四、準(zhǔn)備kubernetes集群

1、服務(wù)器列表

服務(wù)器名稱 IP地址 配置 用途 k8s-master 192.168.1.20 2c2g20g 主節(jié)點(diǎn) k8s-node01 192.168.1.21 2c2g20g 工作節(jié)點(diǎn)1 k8s-node02 192.168.1.22 2c2g20g 工作節(jié)點(diǎn)2

關(guān)閉防火墻,selinux略

?2、同步時(shí)間(all服務(wù)器)

[root@k8s-master ~]# yum -y install chrony

[root@k8s-master ~]# systemctl enable --now chronyd

[root@k8s-master ~]# vim /etc/chrony.conf

1 # Use public servers from the pool.ntp.org project.

2 # Please consider joining the pool (http://www.pool.ntp.org/join.html).

3 #server 0.centos.pool.ntp.org iburst

4 #server 1.centos.pool.ntp.org iburst

5 #server 2.centos.pool.ntp.org iburst

6 #server 3.centos.pool.ntp.org iburst

7 server ntp1.aliyun.com iburst

[root@k8s-master ~]# systemctl restart chronyd

3、關(guān)閉swap分區(qū)和添加主機(jī)映射

[root@k8s-master ~]# swapoff -a

[root@k8s-master ~]# sed -ri 's/.*swap.*/#&/' /etc/fstab

[root@k8s-master ~]# vim /etc/hosts

192.168.1.20 k8s-master

192.168.1.21 k8s-worker01

192.168.1.22 k8s-worker02

4、加載br_netfilter模塊(all)

由于開啟內(nèi)核 ipv4 轉(zhuǎn)發(fā)需要加載 br_netfilter 模塊,所以加載下該模塊,但是這個(gè)模塊不會(huì)默認(rèn)加載,所以我們開啟后還要設(shè)置開機(jī)自動(dòng)加載這個(gè)模塊

# 設(shè)置開機(jī)自動(dòng)加載這個(gè)模塊

cat >> /etc/rc.d/rc.local << EOF

/usr/sbin/modprobe br_netfilter

EOF

chmod +x /etc/rc.d/rc.local

# 立刻加載

modprobe br_netfilter

5、橋接的ipv4流量傳遞給iptables(all)

cat > /etc/sysctl.d/k8s.conf << EOF

net.bridge.bridge-nf-call-ip6tables = 1

net.bridge.bridge-nf-call-iptables = 1

net.ipv4.ip_forward = 1

EOF

sysctl --system

6、安裝ipset和ipvsadm(all)

請求多的時(shí)候可能會(huì)導(dǎo)致響應(yīng)過慢,安裝這兩個(gè)軟件能夠在一定程度上提升ipvs轉(zhuǎn)發(fā)速度

[root@k8s-master ~]# yum install -y ipset ipvsadm

cat > /etc/sysconfig/modules/ipvs.modules << EOF

modprobe -- ip_vs

modprobe -- ip_vs_rr

modprobe -- ip_vs_wrr

modprobe -- ip_vs_sh

modprobe -- nf_conntrack

EOF

7、安裝containerd(all)

下載地址:https://github.com/containerd/containerd/releases/download/v1.6.21/cri-containerd-cni-1.6.21-linux-amd64.tar.gz

上傳到每臺(tái)服務(wù)器上的/usr/local/src/下面

解壓

[root@k8s-master src]# tar -zxvf cri-containerd-cni-1.6.21-linux-amd64.tar.gz -C /

查看版本號(hào):[root@k8s-master src]# containerd -version

# 生成配置文件

[root@k8s-master ~]# mkdir /etc/containerd

[root@k8s-master ~]# containerd config default > /etc/containerd/config.toml

配置文件(/etc/containerd/config.toml)需要將?sandbox_image?的版本號(hào)改一下版本號(hào)和鏡像地址,因?yàn)槟J(rèn)的鏡像地址是在谷歌上的,谷歌國內(nèi)訪問不到

默認(rèn)值:sandbox_image = “registry.k8s.io/pause:3.6”

目標(biāo)值:sandbox_image = “registry.aliyuncs.com/google_containers/pause:3.9”

啟動(dòng)并設(shè)置為開機(jī)自啟動(dòng)

[root@k8s-master ~]# systemctl enable --now containerd

8、安裝runc(all)

containerd自帶有runc,但是自帶的有些問題,所以我們還需要特意安裝一遍穩(wěn)定版的runc

[root@k8s-master ~]# runc

runc: symbol lookup error: runc: undefined symbol: seccomp_notify_respond

需要下載gperf,因?yàn)樽约旱姆?wù)器yum下不到這個(gè)包所以要使用這種方法;看文檔:【騰訊文檔】自制repo包

使用騰訊云或者阿里云的服務(wù)器

騰訊文檔

使用yum指定安裝

[root@k8s-master ~]# yum -y install gperf/gperf-3.0.4-8.el7.x86_64.rpm

下載libseccomp地址:

https://github.com/opencontainers/runc/releases/download/v1.1.7/libseccomp-2.5.4.tar.gz

/usr/local/src下面

[root@k8s-master src]# tar -zxvf libseccomp-2.5.4.tar.gz

[root@k8s-master src]# yum install -y gcc gcc-c++

[root@k8s-master src]# cd libseccomp-2.5.4

[root@k8s-master libseccomp-2.5.4]# ./configure

[root@k8s-master libseccomp-2.5.4]# make && make install

查看是否安裝成功

下載runc

地址:https://github.com/opencontainers/runc/releases/download/v1.1.7/runc.amd64

到:/usr/local/src下面

[root@k8s-master src]# rm -rf /usr/local/sbin/runc

[root@k8s-master src]# chmod +x runc.amd64

[root@k8s-master src]# mv runc.amd64 /usr/local/sbin/runc

?9、安裝k8s(all)

配置k8s的yum源

cat < /etc/yum.repos.d/kubernetes.repo

[kubernetes]

name=Kubernetes

baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/

enabled=1

gpgcheck=0

repo_gpgcheck=0

gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg

EOF

#安裝阿里源

wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

#安裝epel源

wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

#清除緩存并生成新的緩存

yum clean all && yum makecache

[root@k8s-master ~]# yum install -y kubeadm-1.26.5 kubectl-1.26.5 kubelet-1.26.5

[root@k8s-master ~]# systemctl enable kubelet

10、配置Cgroup啟動(dòng)更改為systemd(all)

[root@k8s-master ~]# sed -i 's/KUBELET_EXTRA_ARGS=/KUBELET_EXTRA_ARGS="--cgroup-driver=systemd"/g' /etc/sysconfig/kubelet

11、初始化集群(master節(jié)點(diǎn))

下載離線鏡像

鏈接:https://pan.baidu.com/s/1-ILbg0GG8jNHQhVaVhUKww?pwd=kfe2

提取碼:kfe2

上傳到master服務(wù)器

解壓

[root@k8s-master ~]# tar -zxvf k8s-image.tar.gz

需要使用文件傳輸命令把?k8s-node.tar.gz?傳輸?shù)剿械膎ode上:

如果沒有這個(gè)命令空間需要?jiǎng)?chuàng)建all服務(wù)器

[root@k8s-master ~]# ctr ns create k8s.io

master導(dǎo)入鏡像

[root@k8s-master ~]# ctr -n k8s.io image import k8s-master.tar.gz

worker導(dǎo)入鏡像

[root@k8s-worker01 ~]# ctr -n k8s.io image import k8s-node.tar.gz

master初始化

[root@k8s-master ~]# kubeadm init --apiserver-advertise-address=192.168.1.20 --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.26.5 --service-cidr=10.96.0.0/12 --pod-network-cidr=10.244.0.0/16

[root@k8s-master ~]# mkdir -p $HOME/.kube

[root@k8s-master ~]# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

[root@k8s-master ~]# sudo chown $(id -u):$(id -g) $HOME/.kube/config

?12、工作節(jié)點(diǎn)加入集群(worker01,worker02)

遠(yuǎn)程執(zhí)行的代碼需要改一下,需要加上?--cri-socket=unix:///var/run/containerd/containerd.sock所以執(zhí)行:

[root@k8s-worker02 ~]# kubeadm join 192.168.1.20:6443 --token swhy5s.uckong39hcyfuz59 --discovery-token-ca-cert-hash sha256:71717f742f2a48e1efb05bdbd48c3f65a26d3a223def2e529149ff1776230fa0 --cri-socket=unix:///var/run/containerd/containerd.sock

設(shè)置開機(jī)自啟動(dòng)

[root@k8s-master ~]# systemctl enable --now kubelet

13、安裝Calico網(wǎng)絡(luò)插件(master)

[root@k8s-master ~]# kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.25.1/manifests/tigera-operator.yaml

安裝Calico

cat < custom-resources.yaml

apiVersion: operator.tigera.io/v1

kind: Installation

metadata:

name: default

spec:

calicoNetwork:

ipPools:

- blockSize: 26

cidr: 10.244.0.0/16

encapsulation: VXLANCrossSubnet

natOutgoing: Enabled

nodeSelector: all()

---

apiVersion: operator.tigera.io/v1

kind: APIServer

metadata:

name: default

spec: {}

EOF

[root@k8s-master ~]# kubectl create -f custom-resources.yaml

14、安裝MetaILB負(fù)載均衡器(master)

metallb是用于kubernetes的Service暴露LoadBalancer的負(fù)載均衡器

kubectl edit configmap -n kube-system kube-proxy

root@k8s-master ~]# kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.13.9/config/manifests/metallb-native.yaml

五、部署到kubernetes

1、嘗試手動(dòng)部署

首先我們使用yaml的方式部署到kubernetes,先創(chuàng)建一個(gè)secret保存Docker的登陸信息:

# 注意修改自己對應(yīng)的信息

[root@k8s-master ~]# kubectl create secret docker-registry devops-secret --docker-server='registry.cn-hangzhou.aliyuncs.com' --docker-username='devops@1013754841765121' --docker-password='Aq123456' --docker-email='guoweijiemail@163.com' --dry-run -o yaml >> deploy-devops.yaml

然后我們再生成一個(gè)Deployment部署這個(gè)java程序,生成之前需要現(xiàn)在deploy-devops.yaml后面加上?---,因?yàn)樾枰珠_兩段yaml,如圖:

# 生成yaml文件 注意替換自己的信息

[root@k8s-master ~]# kubectl create deployment devops-example --image=registry.cn-hangzhou.aliyuncs.com/devops-gwjcloud/devops-example:v1.0.0 --replicas=1 --port=8080 --dry-run -o yaml >> deploy-devops.yaml

在yaml文件中添加自己的secret信息

[root@k8s-master ~]# kubectl apply -f deploy-devops.yaml

[root@k8s-master ~]# kubectl get pod -o wide

NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES

devops-example-56f7597746-kh2tn 1/1 Running 0 6m5s 10.244.79.82 k8s-worker01

[root@k8s-master ~]# curl 10.244.79.82:/devops

curl: (7) Failed connect to 10.244.79.82:80; Connection refused

[root@k8s-master ~]# curl 10.244.79.82:8080/devops

Hello DevOps --- V1.0.0[root@k8s-master ~]#

接下來暴漏端口給外部訪問,也是生成yaml文件

[root@k8s-master ~]# vim deploy-devops.yaml

[root@k8s-master ~]# kubectl expose deployment devops-example --name=devops-example-svc --port=8080 --target-port=8080 --type=NodePort -o yaml --dry-run >> deploy-devops.yaml

執(zhí)行這個(gè)yaml文件

[root@k8s-master ~]# kubectl apply -f deploy-devops.yaml

通過這個(gè)端口,集群的任意一個(gè)節(jié)點(diǎn)加端口都可以訪問

?2、jenkins自動(dòng)完成kubernetes部署

需要在Jenkins上面新安裝一個(gè)插件

publish over ssh

配置遠(yuǎn)程服務(wù)器

應(yīng)用保存

重啟jenkins

[root@jenkins ~]# systemctl restart jenkins

使用流水線腳本來配置

kubectl set image deployment devops-example devops-example=registry.cn-hangzhou.aliyuncs.com/devops-gwjcloud/devops-example:${tag} --record

把生成的流水線腳本放到j(luò)enkinsfile文件中

推送并提交

測試修改代碼并通過流水線構(gòu)建

提交到gitlab

打標(biāo)簽并推送

PS D:\Java-code\devops> git tag -a v1.1.0 -m 'Version v1.1.0'

PS D:\Java-code\devops> git push origin v1.1.0

成功

可以看到鏡像切換完成

訪問測試

點(diǎn)擊v1.0.0構(gòu)建看看會(huì)發(fā)生什么

成功回退

要注意的是:jenkins是根據(jù)tag之前的代碼來進(jìn)行拉取的,如果你剛剛打完tag,后提交的代碼是不會(huì)生效的。要重新打tag版本,在次構(gòu)建才會(huì)生效!

柚子快報(bào)邀請碼778899分享:運(yùn)維 Devops

http://yzkb.51969.com/

文章鏈接

評(píng)論可見,查看隱藏內(nèi)容

本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場。

轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。

本文鏈接:http://gantiao.com.cn/post/19427605.html

發(fā)布評(píng)論

您暫未設(shè)置收款碼

請?jiān)谥黝}配置——文章設(shè)置里上傳

掃描二維碼手機(jī)訪問

文章目錄