環(huán)境信息
-購(gòu)買(mǎi)操作系統(tǒng)選擇centos7(7的任何一個(gè)版本都可以),如果選錯(cuò)了可以在阿里云管理面板的-更多--云盤(pán)和鏡像--更換操作系統(tǒng)。

在阿里云購(gòu)買(mǎi)ecs-購(gòu)買(mǎi)后機(jī)器網(wǎng)卡環(huán)境:
公網(wǎng)IP-8.134.76.228、內(nèi)網(wǎng)IP-172.30.40.94

安裝部署過(guò)程中所有IP配置,請(qǐng)配置-172.30.40.94,容器的外部IP也是這個(gè),不是公網(wǎng)IP,公網(wǎng)IP的端口映射通過(guò)阿里云安全配置組+ iptables -P FORWARD ACCEPT,轉(zhuǎn)發(fā)來(lái)實(shí)現(xiàn)。
設(shè)置阿里云端口映射:
開(kāi)放兩個(gè)端口
8080:kube訪(fǎng)問(wèn)用
8081:部署nginx服務(wù)用
配置入口-->安全組-->配置規(guī)則

點(diǎn)擊手動(dòng)添加,添加8080和8081端口

開(kāi)始安裝
ssh登陸服務(wù)器,安裝從頭至尾,一直在root用戶(hù)根目錄就行了,不用切換目錄。
1.安裝rhsm
如果不安裝,kubectl安裝的應(yīng)用會(huì)一直creating,在kubectl describe pod pod名稱(chēng)可以查看到,有證書(shū)問(wèn)題。
運(yùn)行下面三條命令安裝
yum install -y rhsm
wget http://mirror.centos.org/centos/7/os/x86_64/Packages/python-rhsm-certificates-1.19.10-1.el7_4.x86_64.rpm
rpm2cpio python-rhsm-certificates-1.19.10-1.el7_4.x86_64.rpm | cpio -iv --to-stdout ./etc/rhsm/ca/redhat-uep.pem | tee /etc/rhsm/ca/redhat-uep.pem

2.安裝 kubernetes etcd
yum -y install kubernetes etcd

如果安裝正常后,可以查看到 docker 和kube的版本信息。
docker version
image.png
kubectl version
image.png
3.修改docker配置文件
vim /etc/sysconfig/docker
修改配置文件的OPTIONS內(nèi)容為一下內(nèi)容
OPTIONS='--selinux-enabled=false --insecure-registry gcr.io'
image.png
4.修改kube配置文件
vim /etc/kubernetes/apiserver
修改 KUBE_ADMISSION_CONTROL的值,刪除其中的ServiceAccount
修改KUBE_API_ADDRESS 地址的127.0.0.1 改為 0.0.0.0
image.png
5.設(shè)置允許轉(zhuǎn)發(fā)
iptables -P FORWARD ACCEPT
image.png
6.啟動(dòng)kube和docker
啟動(dòng)命令如下:
systemctl start etcd
systemctl start docker
systemctl start kube-apiserver
systemctl start kube-controller-manager
systemctl start kube-scheduler
systemctl start kubelet
systemctl start kube-proxy
image.png
7.安裝nginx
下載nginx鏡像
docker pull nginx
image.png
發(fā)布nginx鏡像-創(chuàng)建deployment、pod
kubectl run kube-nginx --image=nginx --replicas=1 --port=80
image.png
創(chuàng)建nginx-service
與docker發(fā)布的應(yīng)用不同,kube創(chuàng)建的pod端口不能直接訪(fǎng)問(wèn),需要?jiǎng)?chuàng)建一個(gè)service對(duì)deployment做端口映射才能在外部訪(fǎng)問(wèn)(external-ip配置機(jī)器的內(nèi)網(wǎng)地址:172.30.40.94,相對(duì)于容器而言這個(gè)地址就是外網(wǎng)IP)。
kubectl expose deployment kube-nginx --port=8081 --target-port=80 --external-ip=172.30.40.94
image.png
查看POD運(yùn)行情況
kubectl get pod
image.png
異常情況處理,如果出現(xiàn)了ContainerCreating,則先執(zhí)行獲取一次證書(shū),然后刪除deployment和service后重新創(chuàng)建。
image.png
異常處理命令如下:
rpm2cpio python-rhsm-certificates-1.19.10-1.el7_4.x86_64.rpm | cpio -iv --to-stdout ./etc/rhsm/ca/redhat-uep.pem | tee /etc/rhsm/ca/redhat-uep.pem
kubectl delete service kube-nginx
kubectl delete deployment kube-nginx
kubectl run kube-nginx --image=nginx --replicas=1 --port=80
kubectl expose deployment kube-nginx --port=8081 --target-port=80 --external-ip=172.30.40.94
kubectl get pod
image.png
驗(yàn)證nginx安裝是否成功
內(nèi)網(wǎng)驗(yàn)證
curl http://172.30.40.94:8081
image.png
公網(wǎng)驗(yàn)證
執(zhí)行iptables -P FORWARD ACCEPT
image.png
瀏覽器打開(kāi)公網(wǎng)地址:
http://8.134.76.228:8081/
image.png
8.安裝web管理端-dashboard
下載dashboard鏡像
docker pull docker.io/siriuszg/kubernetes-dashboard-amd64:v1.5.1
image.png
創(chuàng)建dashboard的deployment文件
vim kubernetes-dashboard.yaml
image.png
內(nèi)容如下,只需要修改apiserver-host的地址為機(jī)器的內(nèi)網(wǎng)地址:
kind: Deployment
apiVersion: extensions/v1beta1
metadata:
labels:
app: kubernetes-dashboard
name: kubernetes-dashboard
namespace: kube-system
spec:
replicas: 1
selector:
matchLabels:
app: kubernetes-dashboard
template:
metadata:
labels:
app: kubernetes-dashboard
annotations:
scheduler.alpha.kubernetes.io/tolerations: |
[
{
"key": "dedicated",
"operator": "Equal",
"value": "master",
"effect": "NoSchedule"
}
]
spec:
containers:
- name: kubernetes-dashboard
image: docker.io/siriuszg/kubernetes-dashboard-amd64:v1.5.1
imagePullPolicy: Always
ports:
- containerPort: 9090
protocol: TCP
args:
- --apiserver-host=http://172.30.40.94:8080
livenessProbe:
httpGet:
path: /
port: 9090
initialDelaySeconds: 30
timeoutSeconds: 30
---
kind: Service
apiVersion: v1
metadata:
labels:
app: kubernetes-dashboard
name: kubernetes-dashboard
namespace: kube-system
spec:
type: NodePort
ports:
- port: 80
targetPort: 9090
selector:
app: kubernetes-dashboard

通過(guò)文件創(chuàng)建dashboard 的deployment、pod、service
kubectl create -f kubernetes-dashboard.yaml
image.png
查看POD運(yùn)行情況
kubectl get pods --all-namespaces
image.png
公網(wǎng)驗(yàn)證-web管理界面
瀏覽器訪(fǎng)問(wèn): http://8.134.76.228:8080/ui
image.png
9.配置docker遠(yuǎn)程連接
在服務(wù)器上面開(kāi)放端口,提供給idea調(diào)用打包鏡像。
服務(wù)器配置
vim /lib/systemd/system/docker.service
在 ExecStart=/usr/bin/dockerd-current 后面添加 -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock
image.png
重啟所有服務(wù)、刷新端口
systemctl restart etcd
systemctl restart docker
systemctl restart kube-apiserver
systemctl restart kube-controller-manager
systemctl restart kube-scheduler
systemctl restart kubelet
systemctl restart kube-proxy
iptables -P FORWARD ACCEPT
idea配置
idea需要安裝docker插件,沒(méi)安裝的自己安裝,在settings--docker--配置公網(wǎng)地址 tcp://8.134.76.228:2375

電腦添加環(huán)境變量
DOCKER_HOST
tcp://8.134.76.228:2375

關(guān)閉所有idea項(xiàng)目,重新打開(kāi)idea(不重啟,環(huán)境變量不生效)。
10.創(chuàng)建springboot-docker項(xiàng)目
創(chuàng)建spring boot項(xiàng)目
創(chuàng)建

選擇web

創(chuàng)建indexController
@RestController
public class IndexController {
@GetMapping("/")
public String index(){
return "test is ok";
}
}
image.png
配置spring boot應(yīng)用端口
修改resources下面的application.properties 增加一行配置server.port=8080

創(chuàng)建docker文件
在根目錄下創(chuàng)建docker文件,文件名:Dockerfile
內(nèi)容:
FROM openjdk:8-jdk-alpine
ENV TIME_ZONE Asia/Shanghai
RUN apk add --no-cache tzdata &&
echo "{TIME_ZONE} /etc/localtime
VOLUME /data
ARG JAR_FILE
ADD ${JAR_FILE} run.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/run.jar"]
image.png
pom文件build增加docker配置:
內(nèi)容:
<resources>
<resource>
<directory>src/main/docker</directory>
<filtering>true</filtering>
<includes>
<include>**/Dockerfile</include>
</includes>
<targetPath>../docker</targetPath>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>com.spotify</groupId>
<artifactId>dockerfile-maven-plugin</artifactId>
<version>1.4.0</version>
<configuration>
<repository>${project.artifactId}</repository>
<tag>${project.version}</tag>
<buildArgs>
<JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
</buildArgs>
</configuration>
</plugin>
</plugins>
</build>

11.打包jar和docker鏡像
打包jar

打包docker
這個(gè)打包后是直接將鏡像傳到服務(wù)器了(如果出現(xiàn)連接異常,檢查環(huán)境變量配置,重啟idea再操作,另外鏡像很大時(shí)可能出現(xiàn)timeout,可重新操作)。

打包成功:

查看打包的鏡像
idea中查看

*** 服務(wù)器上查看***
docker images
image.png
創(chuàng)建demo項(xiàng)目和發(fā)布
創(chuàng)建docker-k8-demo的deployment文件
不需要修改內(nèi)容,8080端口為容器里面使用的端口,不會(huì)和已經(jīng)部署的應(yīng)用產(chǎn)生端口沖突,nodePort為訪(fǎng)問(wèn)端口,內(nèi)網(wǎng)IP和公網(wǎng)映射都可以轉(zhuǎn)到這個(gè)端口進(jìn)行訪(fǎng)問(wèn),可根據(jù)需要修改。
vim k8demo.yaml
內(nèi)容如下:
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: docker-k8-demo
namespace: kube-system
spec:
replicas: 1
template:
metadata:
labels:
app: docker-k8-demo
spec:
containers:
- name: docker-k8-demo
image: docker-k8-demo:0.0.1-SNAPSHOT
ports:
- protocol: TCP
containerPort: 8080
---
apiVersion: v1
kind: Service
metadata:
name: docker-k8-demo
namespace: kube-system
spec:
type: NodePort
selector:
app: docker-k8-demo
ports:
- protocol: TCP
port: 18082
targetPort: 8080
nodePort: 31082
創(chuàng)建deployment、pod、service
(如果要?jiǎng)h除使用:kubectl delete -f k8demo.yaml)
kubectl create -f k8demo.yaml
iptables -P FORWARD ACCEPT
image.png
內(nèi)網(wǎng)測(cè)試
kubectl get pod --all-namespaces
kubectl get service --all-namespaces
curl http://172.30.40.94:31082
image.png
公網(wǎng)測(cè)試
瀏覽器打開(kāi):http://8.134.76.228:31082/

web管理臺(tái)查看應(yīng)用狀態(tài)
進(jìn)入:http://8.134.76.228:8080/ui
切換namespace 為kube-system,查看應(yīng)用。

鏡像打包
研發(fā)完成后,可能需要將鏡像發(fā)布到生產(chǎn)環(huán)境或其它節(jié)點(diǎn),可以進(jìn)行打包。
docker save docker-k8-demo:0.0.1-SNAPSHOT -o k8demo.tar
image.png
#######導(dǎo)入本地鏡像
docker load < k8demo.tar
image.png
完成。
配置網(wǎng)絡(luò)--安裝k8s -- 部署nginx--部署管理界面--配置docker遠(yuǎn)程端口--創(chuàng)建springboot項(xiàng)目--配置docker文件--打包鏡像--創(chuàng)建pod,測(cè)試應(yīng)用。



























