环境信息
-购买操作系统选择centos7(7的任何一个版本都可以),如果选错了可以在阿里云管理面板的-更多--云盘和镜像--更换操作系统。
在阿里云购买ecs-购买后机器网卡环境:
公网IP-8.134.76.228、内网IP-172.30.40.94
安装部署过程中所有IP配置,请配置-172.30.40.94,容器的外部IP也是这个,不是公网IP,公网IP的端口映射通过阿里云安全配置组+ iptables -P FORWARD ACCEPT,转发来实现。
设置阿里云端口映射:
开放两个端口
8080:kube访问用
8081:部署nginx服务用
配置入口-->安全组-->配置规则
点击手动添加,添加8080和8081端口
开始安装
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
2.安装 kubernetes etcd
yum -y install kubernetes etcd
如果安装正常后,可以查看到 docker 和kube的版本信息。
docker version
kubectl version
3.修改docker配置文件
vim /etc/sysconfig/docker
修改配置文件的OPTIONS内容为一下内容
OPTIONS='--selinux-enabled=false --insecure-registry gcr.io'
4.修改kube配置文件
vim /etc/kubernetes/apiserver
修改 KUBE_ADMISSION_CONTROL的值,删除其中的ServiceAccount
修改KUBE_API_ADDRESS 地址的127.0.0.1 改为 0.0.0.0
5.设置允许转发
iptables -P FORWARD ACCEPT
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
7.安装nginx
下载nginx镜像
docker pull nginx
发布nginx镜像-创建deployment、pod
kubectl run kube-nginx --image=nginx --replicas=1 --port=80
创建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
查看POD运行情况
kubectl get pod
异常情况处理,如果出现了ContainerCreating,则先执行获取一次证书,然后删除deployment和service后重新创建。
异常处理命令如下:
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
验证nginx安装是否成功
内网验证
curl http://172.30.40.94:8081
公网验证
执行iptables -P FORWARD ACCEPT
浏览器打开公网地址:
http://8.134.76.228:8081/
8.安装web管理端-dashboard
下载dashboard镜像
docker pull docker.io/siriuszg/kubernetes-dashboard-amd64:v1.5.1
创建dashboard的deployment文件
vim kubernetes-dashboard.yaml
内容如下,只需要修改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
通过文件创建dashboard 的deployment、pod、service
kubectl create -f kubernetes-dashboard.yaml
查看POD运行情况
kubectl get pods --all-namespaces
公网验证-web管理界面
浏览器访问: http://8.134.76.228:8080/ui
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
重启所有服务、刷新端口
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
电脑添加环境变量
DOCKER_HOST
tcp://8.134.76.228:2375
关闭所有idea项目,重新打开idea(不重启,环境变量不生效)。
10.创建springboot-docker项目
创建spring boot项目
创建
选择web
创建indexController
@RestController
public class IndexController {
@GetMapping("/")
public String index(){
return "test is ok";
}
}
配置spring boot应用端口
修改resources下面的application.properties 增加一行配置server.port=8080
创建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"]
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>
11.打包jar和docker镜像
打包jar
打包docker
这个打包后是直接将镜像传到服务器了(如果出现连接异常,检查环境变量配置,重启idea再操作,另外镜像很大时可能出现timeout,可重新操作)。
打包成功:
查看打包的镜像
idea中查看
*** 服务器上查看***
docker images
创建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
内网测试
kubectl get pod --all-namespaces
kubectl get service --all-namespaces
curl http://172.30.40.94:31082
公网测试
浏览器打开:http://8.134.76.228:31082/
web管理台查看应用状态
进入:http://8.134.76.228:8080/ui
切换namespace 为kube-system,查看应用。
镜像打包
研发完成后,可能需要将镜像发布到生产环境或其它节点,可以进行打包。
docker save docker-k8-demo:0.0.1-SNAPSHOT -o k8demo.tar
#######导入本地镜像
docker load < k8demo.tar
完成。
配置网络--安装k8s -- 部署nginx--部署管理界面--配置docker远程端口--创建springboot项目--配置docker文件--打包镜像--创建pod,测试应用。