阿里云-centos7-單機(jī)安裝部署k8s+nginx+k8sweb管理-dashboard--以及在IDEA中創(chuàng)建springboot項(xiàng)目打包docker鏡像發(fā)布應(yīng)用

環(huán)境信息

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


image.png

在阿里云購(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


image.png

安裝部署過(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ī)則


image.png

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


image.png

開(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

image.png

2.安裝 kubernetes etcd

yum -y install kubernetes etcd

image.png

如果安裝正常后,可以查看到 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
image.png

通過(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

image.png

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


image.png

關(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)建

image.png

選擇web
image.png

創(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

image.png

創(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/timezone && ln -sf /usr/share/zoneinfo/{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>
image.png

11.打包jar和docker鏡像

打包jar

image.png

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

image.png

打包成功:


image.png

查看打包的鏡像
idea中查看

image.png

*** 服務(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/

image.png

web管理臺(tái)查看應(yīng)用狀態(tài)

進(jìn)入:http://8.134.76.228:8080/ui
切換namespace 為kube-system,查看應(yīng)用。

image.png

鏡像打包

研發(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)用。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容