master, node1(worker1), node2(worker2)
Ubuntu 템플릿(4core, 4gb, 40gb)에서 메모리를 3GB 으로 구성,
IP는 bridge 대역에서 DHCP로 받아올 수 있도록 3서버를 전부 구성
각 서버에서 daemaon.json 파일 수정해서 사설저장소에 접근 가능해야한다.
-> "insecure registries "
master 에서 시크릿 생성 및 default namespace 에 등록
worker nodes 에서 init 한 경우
kubeadam reset --cri-socket unix:///run/cri-dockerd.sock
접속창에 192.168.0.1 접속
root@master:~/cri-dockerd# apt-get -y update
<openjdk 11 version 설치>
root@master:~/cri-dockerd# apt-get -y install openjdk-11-jdk
root@master:~/cri-dockerd# wget -q -O - https://pkg.jenkins.io/debian/jenkins-ci.org.key | sudo apt-key add -
root@master:~/cri-dockerd# echo deb http://pkg.jenkins.io/debian-stable binary/ | sudo tee /etc/apt/sources.list.d/jenkins.list
root@master:~/cri-dockerd# sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys FCEF32E745F2C3D5
root@master:~/cri-dockerd# sudo apt-get -y update
root@master:~/cri-dockerd# sudo apt-get install -y jenkins
root@master:~# vi /etc/default/jenkins
root@master:~# vi /usr/lib/systemd/system/jenkins.service
<:/JENKINS_PORT 검색>
# IP address to listen on for HTTP requests.
# The default is to listen on all interfaces (0.0.0.0).
#Environment="JENKINS_LISTEN_ADDRESS="
# Port to listen on for HTTP requests. Set to -1 to disable.
# To be able to listen on privileged ports (port numbers less than 1024),
# add the CAP_NET_BIND_SERVICE capability to the AmbientCapabilities
# directive below.
Environment="JENKINS_PORT=7777"
# IP address to listen on for HTTPS requests. Default is disabled.
#Environment="JENKINS_HTTPS_LISTEN_ADDRESS="
root@master:~# systemctl restart jenkins
Warning: The unit file, source configuration file or drop-ins of jenkins.service changed on disk. Run 'systemctl daemon-reload' to reload units.
sysroot@master:~# systemctl daemon-reload jenkins
Too many arguments.
root@master:~# systemctl daemon-reload
root@master:~# systemctl enable --now jenkins
Synchronizing state of jenkins.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable jenkins
root@master:~# cat /var/lib/jenkins/secrets/initialAdminPassword
자신의 Git Hub 으로 가서 repository 생성
간단한 파일 작성
AWS 의 PipeLine 과는 다르다
AWS 는 커밋 부터 디플로이까지 전 과정을 Pipeline 이라 칭하고
Jenkins 는 빌드 과정의 단계별 작업등을 Pipeline 이라고 한다.
systemctl restart jenkins
크롬 접속창에서 포트 7777로 접속
크롬 접속창에서 rapa.iptime.org:30082 로 접속
반드시 7777 port에서 작업할 것
Console Output 을 클릭해 빌드가 어떻게 이뤄줬는지 확인
빌드에 성공하면 file 들이 workspace 경로에 저장된다.
root@master:~# cd /var/lib/jenkins/workspace/test
root@master:/var/lib/jenkins/workspace/test# ls
index.html
root@master:/var/lib/jenkins/workspace/test# cat index.html
Hello World!
root@master:~# git clone https://github.com/Leeeuijooo/jen
Cloning into 'jen'...
remote: Enumerating objects: 3, done.
remote: Counting objects: 100% (3/3), done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), 602 bytes | 602.00 KiB/s, done.
root@master:~# ls
cri-dockerd get-docker.sh go installer_linux jen snap
root@master:~# cd jen/
root@master:~/jen# git init
Reinitialized existing Git repository in /root/jen/.git/
root@master:~/jen# ls
index.html
root@master:~/jen# git add .
root@master:~/jen# git commit -m "commit1"
*** Please tell me who you are.
Run
git config --global user.email "you@example.com"
git config --global user.name "Your Name"
to set your account's default identity.
Omit --global to set the identity only in this repository.
fatal: unable to auto-detect email address (got 'root@master.(none)')
root@master:~/jen# git config --global user.email "euojoo323@gmail.com"
root@master:~/jen# git config --global user.name "euojoo323gmail.com"
root@master:~/jen# git commit -m "commit1"
On branch main
Your branch is up to date with 'origin/main'.
nothing to commit, working tree clean
root@master:~/jen# git remote show origin
* remote origin
Fetch URL: https://github.com/Leeeuijooo/jen
Push URL: https://github.com/Leeeuijooo/jen
HEAD branch: main
Remote branch:
main tracked
Local branch configured for 'git pull':
main merges with remote main
Local ref configured for 'git push':
main pushes to main (up to date)
# origin 은 이미 clone 해온 상태임
<동기화 해주기>
root@master:~/jen# git push -u origin main
Username for 'https://github.com': Leeeuijooo
Password for 'https://Leeeuijooo@github.com':
Branch 'main' set up to track remote branch 'main' from 'origin'.
Everything up-to-date
<이미지를 생성해서 CI 해볼 것임>
root@master:~/jen# vi Dockerfile
# 192.168.0.195:5000 이 이미 rapa.iptime.org:5000 으로 포트포워딩이 잡혀있는 상태
****
FROM rapa.iptime.org:5000/nginx:latest
****
root@master:~/jen# git add .
root@master:~/jen# git commit -m "Dockerfile add"
[main 8293807] Dockerfile add
1 file changed, 1 insertion(+)
create mode 100644 Dockerfile
root@master:~/jen# git push -u origin main
Username for 'https://github.com': Leeeuijooo
Password for 'https://Leeeuijooo@github.com':
Enumerating objects: 4, done.
Counting objects: 100% (4/4), done.
Delta compression using up to 4 threads
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 317 bytes | 317.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To https://github.com/Leeeuijooo/jen
f6084ae..8293807 main -> main
Branch 'main' set up to track remote branch 'main' from 'origin'.
Jenkins 콘솔로 이동
root@master:~/jen# visudo /etc/sudoers
****
# 맨 끝줄에다가 jenkins ALL=(ALL) NOPASSWD: ALL 추가
# User alias specification
# Cmnd alias specification
# User privilege specification
root ALL=(ALL:ALL) ALL
# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL
# Allow members of group sudo to execute any command
%sudo ALL=(ALL:ALL) ALL
# See sudoers(5) for more information on "#include" directives:
#includedir /etc/sudoers.d
jenkins ALL=(ALL) NOPASSWD: ALL
^G Get Help ^O Write Out ^W Where Is ^K Cut Text ^J Justify
^X Exit ^R Read File ^\ Replace ^U Paste Text^T To Spell
*****
# Ctrl + x -> yes -> Enter
Failed Message - insecure 에 등록을 안한 오류
root@master:~/jen# vi /etc/docker/daemon.json
root@master:~/jen# cat /etc/docker/daemon.json
{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2",
"insecure-registries" : ["192.168.0.195:5000","rapa.iptime.org:5000"]
}
Success Message
<성공적인지 테스트>
root@master:~/jen# curl localhost:5656
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>
<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>
<p><em>Thank you for using nginx.</em></p>
</body>
</html>
성공적으로 테스트가 완료됐으므로 test 컨테이너 삭제
root@master:~/jen# docker rm -f test
test
Git Hub 레포지토리 접속
체크표시가 되어있으면 web hook 이 성공적인 것임
redeliver 수행
자동으로 빌드되는지 테스트하기 위해 Index.html 파일 수정
<문제>
index.html에 변경사항이 발생했을때 해당파일을 포함한 이미지로 컨테이너가 생성되도록
필요 : master 서버의 git 과 Git Hub 의 레지스트리를 동기화
상태 : master 서버의 index.html 형상은 Hello world 가 찍혀있고
Git hub 의 index.html 형상은 Hello world Hello Long 정은이 찍혀있다
root@master:~/jen# git pull origin main
From https://github.com/Leeeuijooo/jen
* branch main -> FETCH_HEAD
Updating 8293807..5a1bea6
Fast-forward
index.html | 1 +
1 file changed, 1 insertion(+)
master 서버에서 Dockerfile을 수정
root@master:~/jen# cat Dockerfile
FROM rapa.iptime.org:5000/nginx:latest
ADD index.html /usr/share/nginx/html
root@master:~/jen# git init
Reinitialized existing Git repository in /root/jen/.git/
root@master:~/jen# git add .
root@master:~/jen# git commit -m "Go"
[main 5786bce] Go
1 file changed, 1 insertion(+)
<Git Push>
root@master:~/jen# git push -u origin main
Username for 'https://github.com': Leeeuijooo
Password for 'https://Leeeuijooo@github.com':
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Delta compression using up to 4 threads
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 339 bytes | 339.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To https://github.com/Leeeuijooo/jen
5a1bea6..5786bce main -> main
Branch 'main' set up to track remote branch 'main' from 'origin'.
동기화 시킨 상태
Docker file 을 수정하고 Git repository 에 Push
자동으로 Build 되어 있음을 확인
Web hook 활성
root@master:~/jen# curl localhost:5656
Hello World!
Hello Long 정은
<문제>
노드포트 30001번으로 접속 가능한 Pod를 하나 띄울 것
해당 노드포트로 접속했을때 'Hello-World" 라는 내용이 뜨도록
**************
<Dockerfile>
root@master:~/jen# cat Dockerfile
FROM 192.168.0.195:5000/nginx:latest
ADD index.html /usr/share/nginx/html
**************
<index.html>
root@master:~/jen# cat index.html
Hello World!
Hello Long jung perfect!!
**************
<pod.yml> - 간단한 Pod , service 띄우는 yaml
root@master:~/jen# cat pod.yml
apiVersion: v1
kind: Pod
metadata:
name: pod-test
labels:
app: pod-test
spec:
containers:
- name: pod-test
image: 192.168.0.195:5000/nginx:joo
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: pod-test-service
spec:
selector:
app: pod-test
ports:
- name: http
protocol: TCP
port: 80
targetPort: 80
nodePort: 30001
type: NodePort
**************
<git hub에 PUSH>
root@master:~/jen# git init
Reinitialized existing Git repository in /root/jen/.git/
root@master:~/jen# git add .
root@master:~/jen# git commit -m "Last"
[main 023ccc4] Last
2 files changed, 2 insertions(+), 2 deletions(-)
root@master:~/jen# git push -u origin main
Username for 'https://github.com': Leeeuijooo
Password for 'https://Leeeuijooo@github.com':
Enumerating objects: 7, done.
Counting objects: 100% (7/7), done.
Delta compression using up to 4 threads
Compressing objects: 100% (3/3), done.
Writing objects: 100% (4/4), 378 bytes | 378.00 KiB/s, done.
Total 4 (delta 1), reused 0 (delta 0)
remote: Resolving deltas: 100% (1/1), completed with 1 local object.
To https://github.com/Leeeuijooo/jen
e200620..023ccc4 main -> main
Branch 'main' set up to track remote branch 'main' from 'origin'.
<Pod, Service 확인>
root@master:~/jen# kubectl get pod
NAME READY STATUS RESTARTS AGE
pod-test 1/1 Running 0 13s
<Curl 명령어로 테스트>
![](https://velog.velcdn.com/images/euijoo3233/post/51b1e117-c09f-40f4-8979-b4580b5db93c/image.png)
![](https://velog.velcdn.com/images/euijoo3233/post/5de78bae-a13c-4226-9e9b-d17376a2e297/image.png)
![](https://velog.velcdn.com/images/euijoo3233/post/c4e86782-6c68-4f74-851c-ba66c4e403f1/image.png)
![](https://velog.velcdn.com/images/euijoo3233/post/5f561218-6975-4f50-b23f-410633a467cd/image.png)
root@master:~/jen# curl localhost:30001
Hello World!
Hello Long jung perfect!!
Prepare for the https://www.dumpstool.com/NCS-Core-exam.html with confidence! This certification validates your expertise in core Nutanix technologies and solutions, demonstrating your ability to design, implement, and manage Nutanix environments effectively. The exam covers essential topics, including virtualization, storage, and networking, ensuring you have a comprehensive understanding of the Nutanix ecosystem. With hands-on experience and thorough study resources, you can master the concepts and enhance your career prospects. Join the ranks of certified professionals and unlock new opportunities in cloud computing and hyper-converged infrastructure. Start your journey today and elevate your skills to the next level!