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

环境信息

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


image.png

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


image.png

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

设置阿里云端口映射:

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


image.png

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


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

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内容为一下内容
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.设置允许转发

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


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后重新创建。


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

image.png

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

浏览器打开公网地址:
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

创建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
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

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

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

image.png

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


image.png

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

10.创建springboot-docker项目

创建spring boot项目
创建

image.png

选择web
image.png

创建indexController

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


image.png

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

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/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配置:
内容:

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

image.png

打包成功:


image.png

查看打包的镜像
idea中查看

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
image.png

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

image.png

web管理台查看应用状态

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

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,测试应用。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,716评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,558评论 1 294
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,431评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,127评论 0 209
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,511评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,692评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,915评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,664评论 0 202
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,412评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,616评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,105评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,424评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,098评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,096评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,869评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,748评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,641评论 2 271

推荐阅读更多精彩内容