阿里云-centos7-单机安装部署k8s+nginx+k8sweb管理-dashboard--以及在IDEA中创建springboot项目打包docker镜像发布应用

环境信息

-购买操作系统选择centos7(7的任何一个版本都可以),如果选错了可以在阿里云管理面板的-更多--云盘和镜像--更换操作系统。


阿里云-centos7-单机安装部署k8s+nginx+k8sweb管理-dashboard--以及在IDEA中创建springboot项目打包docker镜像发布应用_第1张图片
image.png

在阿里云购买ecs-购买后机器网卡环境:
公网IP-8.134.76.228、内网IP-172.30.40.94


阿里云-centos7-单机安装部署k8s+nginx+k8sweb管理-dashboard--以及在IDEA中创建springboot项目打包docker镜像发布应用_第2张图片
image.png

安装部署过程中所有IP配置,请配置-172.30.40.94,容器的外部IP也是这个,不是公网IP,公网IP的端口映射通过阿里云安全配置组+ iptables -P FORWARD ACCEPT,转发来实现。

设置阿里云端口映射:

开放两个端口
8080:kube访问用
8081:部署nginx服务用
配置入口-->安全组-->配置规则


阿里云-centos7-单机安装部署k8s+nginx+k8sweb管理-dashboard--以及在IDEA中创建springboot项目打包docker镜像发布应用_第3张图片
image.png

点击手动添加,添加8080和8081端口


阿里云-centos7-单机安装部署k8s+nginx+k8sweb管理-dashboard--以及在IDEA中创建springboot项目打包docker镜像发布应用_第4张图片
image.png

开始安装

ssh登陆服务器,安装从头至尾,一直在root用户根目录就行了,不用切换目录。

1.安装rhsm

如果不安装,kubectl安装的应用会一直creating,在kubectl describe pod pod名称可以查看到,有证书问题。

运行下面三条命令安装
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

阿里云-centos7-单机安装部署k8s+nginx+k8sweb管理-dashboard--以及在IDEA中创建springboot项目打包docker镜像发布应用_第5张图片
image.png

2.安装 kubernetes etcd

yum -y install kubernetes etcd

阿里云-centos7-单机安装部署k8s+nginx+k8sweb管理-dashboard--以及在IDEA中创建springboot项目打包docker镜像发布应用_第6张图片
image.png

如果安装正常后,可以查看到 docker 和kube的版本信息。

docker version


image.png

kubectl version


image.png

3.修改docker配置文件

vim /etc/sysconfig/docker
修改配置文件的OPTIONS内容为一下内容
OPTIONS='--selinux-enabled=false --insecure-registry gcr.io'


阿里云-centos7-单机安装部署k8s+nginx+k8sweb管理-dashboard--以及在IDEA中创建springboot项目打包docker镜像发布应用_第7张图片
image.png

4.修改kube配置文件

vim /etc/kubernetes/apiserver
修改 KUBE_ADMISSION_CONTROL的值,删除其中的ServiceAccount
修改KUBE_API_ADDRESS 地址的127.0.0.1 改为 0.0.0.0


阿里云-centos7-单机安装部署k8s+nginx+k8sweb管理-dashboard--以及在IDEA中创建springboot项目打包docker镜像发布应用_第8张图片
image.png

5.设置允许转发

iptables -P FORWARD ACCEPT


image.png

6.启动kube和docker

启动命令如下:

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


阿里云-centos7-单机安装部署k8s+nginx+k8sweb管理-dashboard--以及在IDEA中创建springboot项目打包docker镜像发布应用_第9张图片
image.png

7.安装nginx

下载nginx镜像

docker pull nginx


image.png

发布nginx镜像-创建deployment、pod

kubectl run kube-nginx --image=nginx --replicas=1 --port=80


image.png

创建nginx-service
与docker发布的应用不同,kube创建的pod端口不能直接访问,需要创建一个service对deployment做端口映射才能在外部访问(external-ip配置机器的内网地址:172.30.40.94,相对于容器而言这个地址就是外网IP)。

kubectl expose deployment kube-nginx --port=8081 --target-port=80 --external-ip=172.30.40.94


image.png

查看POD运行情况

kubectl get pod


image.png

异常情况处理,如果出现了ContainerCreating,则先执行获取一次证书,然后删除deployment和service后重新创建。


阿里云-centos7-单机安装部署k8s+nginx+k8sweb管理-dashboard--以及在IDEA中创建springboot项目打包docker镜像发布应用_第10张图片
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

验证nginx安装是否成功

内网验证
curl http://172.30.40.94:8081

阿里云-centos7-单机安装部署k8s+nginx+k8sweb管理-dashboard--以及在IDEA中创建springboot项目打包docker镜像发布应用_第11张图片
image.png

公网验证
执行iptables -P FORWARD ACCEPT
image.png

浏览器打开公网地址:
http://8.134.76.228:8081/
阿里云-centos7-单机安装部署k8s+nginx+k8sweb管理-dashboard--以及在IDEA中创建springboot项目打包docker镜像发布应用_第12张图片
image.png

8.安装web管理端-dashboard

下载dashboard镜像

docker pull docker.io/siriuszg/kubernetes-dashboard-amd64:v1.5.1


image.png

创建dashboard的deployment文件

vim kubernetes-dashboard.yaml


image.png

内容如下,只需要修改apiserver-host的地址为机器的内网地址:

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
阿里云-centos7-单机安装部署k8s+nginx+k8sweb管理-dashboard--以及在IDEA中创建springboot项目打包docker镜像发布应用_第13张图片
image.png

通过文件创建dashboard 的deployment、pod、service

kubectl create -f kubernetes-dashboard.yaml


image.png

查看POD运行情况

kubectl get pods --all-namespaces

image.png

公网验证-web管理界面
浏览器访问: http://8.134.76.228:8080/ui

阿里云-centos7-单机安装部署k8s+nginx+k8sweb管理-dashboard--以及在IDEA中创建springboot项目打包docker镜像发布应用_第14张图片
image.png

9.配置docker远程连接

在服务器上面开放端口,提供给idea调用打包镜像。
服务器配置

vim /lib/systemd/system/docker.service
在 ExecStart=/usr/bin/dockerd-current 后面添加 -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock

阿里云-centos7-单机安装部署k8s+nginx+k8sweb管理-dashboard--以及在IDEA中创建springboot项目打包docker镜像发布应用_第15张图片
image.png

重启所有服务、刷新端口

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插件,没安装的自己安装,在settings--docker--配置公网地址 tcp://8.134.76.228:2375

阿里云-centos7-单机安装部署k8s+nginx+k8sweb管理-dashboard--以及在IDEA中创建springboot项目打包docker镜像发布应用_第16张图片
image.png

电脑添加环境变量
DOCKER_HOST
tcp://8.134.76.228:2375


阿里云-centos7-单机安装部署k8s+nginx+k8sweb管理-dashboard--以及在IDEA中创建springboot项目打包docker镜像发布应用_第17张图片
image.png

关闭所有idea项目,重新打开idea(不重启,环境变量不生效)。

10.创建springboot-docker项目

创建spring boot项目
创建

阿里云-centos7-单机安装部署k8s+nginx+k8sweb管理-dashboard--以及在IDEA中创建springboot项目打包docker镜像发布应用_第18张图片
image.png

选择web
阿里云-centos7-单机安装部署k8s+nginx+k8sweb管理-dashboard--以及在IDEA中创建springboot项目打包docker镜像发布应用_第19张图片
image.png

创建indexController

@RestController
public class IndexController {
@GetMapping("/")
public String index(){
return "test is ok";
}
}


阿里云-centos7-单机安装部署k8s+nginx+k8sweb管理-dashboard--以及在IDEA中创建springboot项目打包docker镜像发布应用_第20张图片
image.png

配置spring boot应用端口
修改resources下面的application.properties 增加一行配置server.port=8080

阿里云-centos7-单机安装部署k8s+nginx+k8sweb管理-dashboard--以及在IDEA中创建springboot项目打包docker镜像发布应用_第21张图片
image.png

创建docker文件
在根目录下创建docker文件,文件名:Dockerfile
内容:

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"]

阿里云-centos7-单机安装部署k8s+nginx+k8sweb管理-dashboard--以及在IDEA中创建springboot项目打包docker镜像发布应用_第22张图片
image.png

pom文件build增加docker配置:
内容:

        
        
        src/main/docker
        true
        
        **/Dockerfile
        
        ../docker
        
        
        
            
            org.springframework.boot
            spring-boot-maven-plugin
            
            
                com.spotify
                dockerfile-maven-plugin
                1.4.0
                
                    ${project.artifactId}
                    ${project.version}
                    
                        target/${project.build.finalName}.jar
                    
                
            
        
    
阿里云-centos7-单机安装部署k8s+nginx+k8sweb管理-dashboard--以及在IDEA中创建springboot项目打包docker镜像发布应用_第23张图片
image.png

11.打包jar和docker镜像

打包jar

阿里云-centos7-单机安装部署k8s+nginx+k8sweb管理-dashboard--以及在IDEA中创建springboot项目打包docker镜像发布应用_第24张图片
image.png

打包docker
这个打包后是直接将镜像传到服务器了(如果出现连接异常,检查环境变量配置,重启idea再操作,另外镜像很大时可能出现timeout,可重新操作)。

阿里云-centos7-单机安装部署k8s+nginx+k8sweb管理-dashboard--以及在IDEA中创建springboot项目打包docker镜像发布应用_第25张图片
image.png

打包成功:


阿里云-centos7-单机安装部署k8s+nginx+k8sweb管理-dashboard--以及在IDEA中创建springboot项目打包docker镜像发布应用_第26张图片
image.png

查看打包的镜像
idea中查看

阿里云-centos7-单机安装部署k8s+nginx+k8sweb管理-dashboard--以及在IDEA中创建springboot项目打包docker镜像发布应用_第27张图片
image.png

*** 服务器上查看***

docker images


image.png

创建demo项目和发布

创建docker-k8-demo的deployment文件
不需要修改内容,8080端口为容器里面使用的端口,不会和已经部署的应用产生端口冲突,nodePort为访问端口,内网IP和公网映射都可以转到这个端口进行访问,可根据需要修改。

vim k8demo.yaml
内容如下:

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
     

创建deployment、pod、service
(如果要删除使用:kubectl delete -f k8demo.yaml)

kubectl create -f k8demo.yaml
iptables -P FORWARD ACCEPT

image.png

内网测试
kubectl get pod --all-namespaces
kubectl get service --all-namespaces
curl http://172.30.40.94:31082
阿里云-centos7-单机安装部署k8s+nginx+k8sweb管理-dashboard--以及在IDEA中创建springboot项目打包docker镜像发布应用_第28张图片
image.png

公网测试
浏览器打开:http://8.134.76.228:31082/

阿里云-centos7-单机安装部署k8s+nginx+k8sweb管理-dashboard--以及在IDEA中创建springboot项目打包docker镜像发布应用_第29张图片
image.png

web管理台查看应用状态

进入:http://8.134.76.228:8080/ui
切换namespace 为kube-system,查看应用。

阿里云-centos7-单机安装部署k8s+nginx+k8sweb管理-dashboard--以及在IDEA中创建springboot项目打包docker镜像发布应用_第30张图片
image.png

镜像打包

研发完成后,可能需要将镜像发布到生产环境或其它节点,可以进行打包。

docker save docker-k8-demo:0.0.1-SNAPSHOT -o k8demo.tar


image.png

#######导入本地镜像

docker load < k8demo.tar


image.png

完成。
配置网络--安装k8s -- 部署nginx--部署管理界面--配置docker远程端口--创建springboot项目--配置docker文件--打包镜像--创建pod,测试应用。

你可能感兴趣的:(阿里云-centos7-单机安装部署k8s+nginx+k8sweb管理-dashboard--以及在IDEA中创建springboot项目打包docker镜像发布应用)