整理了好久,來一波乾貨??
準備k8s叢集機器
一臺k8s部署機(堡壘機) 1G以上 3臺k8s master節點機器 2c4G以上 3臺k8s node節點機器 2c4G以上
為以上7臺機器全部分配固定ip
機器 | ip |
---|---|
K8s-ha-master1 | 172.16.67.130 |
K8s-ha-master2 | 172.16.67.131 |
K8s-ha-master3 | 172.16.67.132 |
K8s-ha-node1 | 172.16.67.135 |
K8s-ha-node2 | 172.16.67.136 |
K8s-ha-node3 | 172.16.67.137 |
K8s-ha-deploy | 172.16.67.140 |
安裝k8s叢集
登陸部署機 生成ssh key: ssh-keygen -t rsa -b 4096 -C "your_email@example.com" 將公鑰拷貝到k8s所有的機器上
ssh-copy-id 172.16.67.130
ssh-copy-id 172.16.67.131
ssh-copy-id 172.16.67.132
ssh-copy-id 172.16.67.135
ssh-copy-id 172.16.67.136
ssh-copy-id 172.16.67.137
ssh-copy-id 172.16.67.140
複製程式碼
下載k8s docker安裝工具包
git clone https://github.com/gjmzj/kubeasz.git
mkdir -p /etc/ansible
mv kubeasz/* /etc/ansible
複製程式碼
參考這個文件https://github.com/gjmzj/kubeasz/blob/master/docs/setup/quickStart.md 下載k8s叢集需要的二進位制檔案和離線docker映象並解壓
把以上的機器配置到ansible裡
cd /etc/ansible && cp example/hosts.m-masters.example hosts
複製程式碼
# 叢集部署節點:一般為執行ansible 指令碼的節點
# 變數 NTP_ENABLED (=yes/no) 設定叢集是否安裝 chrony 時間同步
[deploy]
127.0.0.1 NTP_ENABLED=no
# etcd叢集請提供如下NODE_NAME,注意etcd叢集必須是1,3,5,7...奇數個節點
[etcd]
172.16.67.130 NODE_NAME=etcd1
172.16.67.131 NODE_NAME=etcd2
172.16.67.132 NODE_NAME=etcd3
[new-etcd] # 預留組,後續新增etcd節點使用
#192.168.1.x NODE_NAME=etcdx
[kube-master]
172.16.67.130
172.16.67.131
172.16.67.132
[new-master] # 預留組,後續新增master節點使用
#192.168.1.5
[kube-node]
172.16.67.137 NEW_NODE=yes
172.16.67.136 NEW_NODE=yes
172.16.67.135
[new-node] # 預留組,後續新增node節點使用
#192.168.1.xx
# 引數 NEW_INSTALL:yes表示新建,no表示使用已有harbor伺服器
# 如果不使用域名,可以設定 HARBOR_DOMAIN=""
[harbor]
#192.168.1.8 HARBOR_DOMAIN="harbor.yourdomain.com" NEW_INSTALL=no
# 負載均衡(目前已支援多於2節點,一般2節點就夠了) 安裝 haproxy+keepalived
[lb]
172.16.67.130 LB_ROLE=backup
172.16.67.131 LB_ROLE=master
#【可選】外部負載均衡,用於自有環境負載轉發 NodePort 暴露的服務等
[ex-lb]
#192.168.1.6 LB_ROLE=backup EX_VIP=192.168.1.250
#192.168.1.7 LB_ROLE=master EX_VIP=192.168.1.250
[all:vars]
# ---------叢集主要引數---------------
#叢集部署模式:allinone, single-master, multi-master
DEPLOY_MODE=multi-master
#叢集主版本號,目前支援: v1.8, v1.9, v1.10,v1.11, v1.12, v1.13
K8S_VER="v1.13"
# 叢集 MASTER IP即 LB節點VIP地址,為區別與預設apiserver埠,設定VIP監聽的服務埠8443
# 公有云上請使用雲負載均衡內網地址和監聽埠
MASTER_IP="172.16.67.165"
KUBE_APISERVER="https://{{ MASTER_IP }}:8443"
# 叢集網路外掛,目前支援calico, flannel, kube-router, cilium
CLUSTER_NETWORK="flannel"
# 服務網段 (Service CIDR),注意不要與內網已有網段衝突
SERVICE_CIDR="10.68.0.0/16"
# POD 網段 (Cluster CIDR),注意不要與內網已有網段衝突
CLUSTER_CIDR="172.20.0.0/16"
# 服務埠範圍 (NodePort Range)
NODE_PORT_RANGE="20000-40000"
# kubernetes 服務 IP (預分配,一般是 SERVICE_CIDR 中第一個IP)
CLUSTER_KUBERNETES_SVC_IP="10.68.0.1"
# 叢集 DNS 服務 IP (從 SERVICE_CIDR 中預分配)
CLUSTER_DNS_SVC_IP="10.68.0.2"
# 叢集 DNS 域名
CLUSTER_DNS_DOMAIN="cluster.local."
# 叢集basic auth 使用的使用者名稱和密碼
BASIC_AUTH_USER="admin"
BASIC_AUTH_PASS="test1234"
# ---------附加引數--------------------
#預設二進位制檔案目錄
bin_dir="/opt/kube/bin"
#證照目錄
ca_dir="/etc/kubernetes/ssl"
#部署目錄,即 ansible 工作目錄,建議不要修改
base_dir="/etc/ansible"
複製程式碼
執行ansible安裝叢集
ansible-playbook 01.prepare.yml
ansible-playbook 02.etcd.yml
ansible-playbook 03.docker.yml
ansible-playbook 04.kube-master.yml
ansible-playbook 05.kube-node.yml
ansible-playbook 06.network.yml
ansible-playbook 07.cluster-addon.yml
複製程式碼
安裝rancher,匯入k8s叢集
使用rancher映象啟動rancher
docker run -d --name=rancher --restart=unless-stopped \
-p 8880:80 -p 8843:443 \
-v ~/rancher:/var/lib/rancher \
rancher/rancher:stable
複製程式碼
登陸 ip:8843檢視效果
匯入k8s叢集
生成配置
獲取生成的配置,在k8s的部署機上執行
curl --insecure -sfL https://172.16.123.1:8843/v3/import/7gtwrh84nlpgkn48pj26lrzv4c8bt4mjl9f7r5w2sfprbt82tkdk6f.yaml | kubectl apply -f -
複製程式碼
在rancher上檢視匯入的叢集
閘道器和專案映象推送阿里雲
將java映象打包推送到阿里雲,參考:github.com/neatlife/jf…
docker build -t jframework .
docker tag jframework:latest registry.cn-hangzhou.aliyuncs.com/suxiaolin/jframework:latest
docker push registry.cn-hangzhou.aliyuncs.com/suxiaolin/jframework:latest
複製程式碼
準備閘道器k8s配置檔案
{
"kind": "DaemonSet",
"apiVersion": "extensions/v1beta1",
"metadata": {
"name": "gateway",
"namespace": "default",
"labels": {
"k8s-app": "gateway"
},
"annotations": {
"deployment.kubernetes.io/revision": "2"
}
},
"spec": {
"selector": {
"matchLabels": {
"k8s-app": "gateway"
}
},
"template": {
"metadata": {
"name": "gateway",
"labels": {
"k8s-app": "gateway"
}
},
"spec": {
"containers": [
{
"name": "gateway",
"ports": [
{
"containerPort": 8080,
"hostPort": 8080,
"name": "8080tcp80800",
"protocol": "TCP"
}
],
"image": "registry.cn-hangzhou.aliyuncs.com/suxiaolin/gateway:latest",
"readinessProbe": {
"httpGet": {
"scheme": "HTTP",
"path": "/actuator/info",
"port": 8080
},
"initialDelaySeconds": 10,
"periodSeconds": 5
},
"resources": {
},
"terminationMessagePath": "/dev/termination-log",
"terminationMessagePolicy": "File",
"imagePullPolicy": "Always",
"securityContext": {
"privileged": false,
"procMount": "Default"
}
}
],
"restartPolicy": "Always",
"terminationGracePeriodSeconds": 30,
"dnsPolicy": "ClusterFirst",
"securityContext": {
},
"schedulerName": "default-scheduler"
}
},
"revisionHistoryLimit": 10
}
}
複製程式碼
準備專案k8s配置檔案
{
"kind": "Deployment",
"apiVersion": "extensions/v1beta1",
"metadata": {
"name": "jframework",
"namespace": "default",
"labels": {
"k8s-app": "jframework"
},
"annotations": {
"deployment.kubernetes.io/revision": "2"
}
},
"spec": {
"replicas": 1,
"selector": {
"matchLabels": {
"k8s-app": "jframework"
}
},
"template": {
"metadata": {
"name": "jframework",
"labels": {
"k8s-app": "jframework"
}
},
"spec": {
"containers": [
{
"name": "jframework",
"image": "registry.cn-hangzhou.aliyuncs.com/suxiaolin/jframework:latest",
"readinessProbe": {
"httpGet": {
"scheme": "HTTP",
"path": "/heartbeat",
"port": 8080
},
"initialDelaySeconds": 10,
"periodSeconds": 5
},
"resources": {
},
"terminationMessagePath": "/dev/termination-log",
"terminationMessagePolicy": "File",
"imagePullPolicy": "Always",
"securityContext": {
"privileged": false,
"procMount": "Default"
}
}
],
"restartPolicy": "Always",
"terminationGracePeriodSeconds": 30,
"dnsPolicy": "ClusterFirst",
"securityContext": {
},
"schedulerName": "default-scheduler"
}
},
"strategy": {
"type": "RollingUpdate",
"rollingUpdate": {
"maxUnavailable": "25%",
"maxSurge": "25%"
}
},
"revisionHistoryLimit": 10,
"progressDeadlineSeconds": 600
}
}
複製程式碼
將專案在rancher上匯入,並檢視效果
閘道器訪問應用叢集可使用k8s內建的dns域名訪問 比如:jframework.default:8080
k8s內建的dns已自帶etcd負載均衡
安裝配置中心
下載apollo docker工具包並啟動
git clone https://github.com/ctripcorp/apollo.git
cd apollo/scripts/docker-quick-start/
docker-compose up -d
複製程式碼
檢視效果
安裝elk
下載elk docker工具包 github.com/deviantony/… 並啟動
git clone https://github.com/deviantony/docker-elk.git
cd docker-elk
docker-compose up -d
複製程式碼
訪問ip:5601檢視效果
安裝pinpoint
下載pinpont docker工具包並啟動
git clone https://github.com/naver/pinpoint-docker.git
cd pinpoint-docker
docker-compose up -d pinpoint-hbase pinpoint-mysql pinpoint-web pinpoint-collector pinpoint-agent zoo1 zoo2 zoo3 jobmanager taskmanager
複製程式碼
訪問ip:8079檢視效果
配置jenkins專案釋出
在jenkins上建立maven構建專案,然後使用rancher啟動叢集
/opt/rancher/rancher kubectl apply -f k8s.yml
複製程式碼
配置阿里雲lsb負載均衡
在阿里雲slbs上 slb.console.aliyun.com/slb/cn-hang…
建立負載均衡,指向閘道器的ip
工具集合
和 java ci/cd環境搭建 一文使用的工具列表
工具 | 作用 |
---|---|
Nexus | maven私服 |
jenkins | 自動打包/釋出 |
docker | 應用虛擬機器 |
gitlab | 原始碼管理 |
yearning | sql稽核 |
Sonarqube | 程式碼質量稽核 |
maven&&gradle | 專案打包工具 |
kubectl | k8s叢集操控工具 |
K8s | 專案執行環境 |
rancher | 簡化k8s管理工具 |
apollo配置中心 | 管理專案叢集配置 |
pinpoint | 專案異常執行監控 |
elk | 應用日誌收集工具 |
阿里雲slbs | 負載均衡 |
ansible | linux命令自動化工具 |
showdoc | 專案文件管理 |
持續更新...