DevOps課程-AWS-EKS 7
在有Jenkins的情況下,有些前置設置要先完成
- 在Jenkins Container內安裝kubectl工具
- 在Jenkins Container內aws-iam-authenticator工具(IAM Authenticator)
- 建立kubeconfig來連線EKS Cluster:
- 也就是Jenkins Container內要包含所有連線到:
- 1.AWS帳號認證權限
- 2.EKS Cluster認證權限
- 而前面透過eksctl工具建置EKS Cluster,就有包含了連線EKS Cluster的資訊:
- 另外安裝了eksctl工具,裡面就包含了”aws-iam-authenticator”工具了
- (但是這應該不包含我windows安裝的exe下載的方式安裝的版本)
- Windows可以另外安裝:
- 也就是本機可以的這些操作,Jenkins Container內也要可以
4. 另外就是AWS的憑證部分,也就是AWS User
5. 調整Jenkinsfile來建置EKS Cluster的deployment
1.在Jenkins Container內安裝kubectl工具
首先連線到DigitalOcean建立的Jenkins機台的Jenkins Container內
建置相關可參考其他筆記
進到Jenkins Container內部後可以透過指令安裝kubectl工具,安裝可參考:
不同於官網的安裝方式,這邊有更容易簡單的安裝手法在
整理起來如下:
#進到Jenkins Container內(用root身分,因為要安裝工具):
docker exec -u 0-it {Jenkins容器id} bash#安裝kubectl工具(下載,更改權限,搬到工具目錄,一次全下!):
curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl;chmod +x ./kubectl;mv ./kubectl /usr/local/bin/kubectl#確認kubectl工具安裝成功:
kubectl version
2.在Jenkins Container內aws-iam-authenticator工具(IAM Authenticator)
參考以下安裝文件:
#在root模式下在Jenkins容器內安裝aws-iam-authenticator:
curl -o aws-iam-authenticator https://s3.us-west-2.amazonaws.com/amazon-eks/1.21.2/2021-07-05/bin/linux/amd64/aws-iam-authenticator#更改權限:
chmod +x ./aws-iam-authenticator#搬到工具目錄:
mv ./aws-iam-authenticator /usr/local/bin/#確認是否安裝成功:
aws-iam-authenticator help
3.建立kubeconfig來連線EKS Cluster
因為Jenkins Container內部沒有編輯器
所以會是在容器外做編輯kubeconfig檔
#編輯一個kubeconfig檔:
vi config
然後直接複製本機建立AWS的EKS Cluster的時候
在~/.kube目錄下的config內容,貼進去
其中要更改三個位置:
- EKS Cluster Name,改成建立的名子 →"demo-cluster"
- Server Endpoint(可以直接去EKS服務業複製API Server Endpoint位置)
- certificate-authority-data
但是目前看到AWS最新文件看起來要改的位置已經不止上面這些了
以下是講師的畫面(紅框是要修改處)
下面是AWS目前的文件:
把上面要寫的config檔的部分擷取如下:
可以看到跟講師的有些內容不太一樣
要改的變數有:
- $cluster_name
- $cluster_endpoint
- $certificate_data
- $region_code
- $account_id
大部分內容都可以參考建置時候本機~/.kube裡面那一份
等檔案編輯好後
#先進到Jenkins Container內把根目錄的.kube目錄建起來,這時候用一般使用者進容器:
docker exec -it {Jenkins容器id} bash
cd ~/
#可以順便確認home目錄是哪裡:
pwd
mkdir .kube
exit#把做好的config檔搬進去容器裡面~/.kube/目錄下:
docker cp config {Jenkins容器id}:/var/jenkins_home/.kube/#進到Jenkins容器內確認:
docker exec -it {Jenkins容器id} bash
cd ~
ls -a
ls .kube
cat ~/.kube/config
貼上上述內容,修改處:
其中$certificate_data可以看到本機的那一份:
後面會直接透過pipeline的env設置AWS憑證資訊的環境變數來調用
4. 另外就是AWS的憑證部分,也就是AWS User
針對BP來說,最好是在AWS的IAM特別建立Jenkins使用的User
設置有限的權限,而不是直接使用Admin的User
不過這邊只是簡單示範
直接在Jenkins的憑證管理內新增兩個Secret text的憑證
內容即是以下兩個:
名稱id給:
- jenkins_aws_access_key_id
- jenkins_aws_secret_access_key
5. 調整Jenkinsfile來建置EKS Cluster的deployment
在Jenkinsfile內寫上如
#在執行以下kubectl工具建置指令時,背後會有aws的相關驗證會一併執行
sh 'kubectl create deployment nginx-deployment --image=nginx'
也就是背後會觸發aws-iam-authenticator工具的驗證
所以在執行上述指令前要先宣告AWS的使用者憑證資訊到環境變數去:
environment{
AWS_ACCESS_KEY_ID = credentials('jenkins_aws_access_key_id')
AWS_SECRET_ACCESS_KEY = credentials('jenkins_aws_secret_access_key')
}
這部分講師是特地拉git server的Jenkinsfile,我就簡單直接寫在Jenkins上面
直接在AWS的EC2上面搞一台:
#RHEL機台準備Jenkins環境:
sudo yum module install container-tools -y#起Jenkins:
sudo podman run -p 8080:8080 -p 50000:50000 -d \
-v jenkins_home:/var/jenkins_home \
docker.io/jenkins/jenkins:lts
最後完成以下:
我先移除最新的kubectl工具
(因為我載的是1.25多版,EKS Cluster是1.23的K8S)
參考前面安裝也有挑版本的選擇:
root身分在Jenkins容器內執行:
curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.23.0/bin/linux/amd64/kubectl;chmod +x ./kubectl;mv ./kubectl /usr/local/bin/kubectl
執行上還是跳請退回舊版yaml檔:
所以改一下kubeconfig的yaml檔
簡單的kubectl get node指令可以正常運作了:
改回佈署的pipeline內容:
完整pipeline如下:
透過Jenkins看pod好像有佈署運作中
去到AWS的EKS上查看:
我本機也能看到:
後來發現是要登IAM的User也就是adminpig才能看到:
真神奇,root帳號反而看不到@@
這邊就直接移除這整個Cluster:
#執行以下移除EKS Cluster指令:
eksctl delete cluster --name demo-cluster