一、环境描述
(1)两个node,一个master和一个minion,其中master节点的ip是192.168.110.151,minion的ip是192.168.110.152
(2)其中151的机器上启动私有registry,提供k8s集群所需要的image
(3)master节点上运行kube-apiserver、kube-controller-manager、kube-scheduler和etcd;minion节点上运行kube-
proxy、kubelet和etcd
(4)其中151机器的hostname是master,152机器的hostname是dockertest4
二、环境搭建
1、etcd环境搭建
(1)master节点操作,将etcd的etcd和etcdctl文件拷贝到/home/docker/xu/etcd目录下,然后在该目录下创建run.sh文件,文件内容如下:
killall -9 etcd
./etcd \
-name etcd0 \
-data-dir etcd0.etcd \
-initial-advertise-peer-urls http://master:2380 \
-listen-peer-urls http://master:2380 \
-listen-client-urls http://master:2379,http://127.0.0.1:2379 \
-advertise-client-urls http://master:2379 \
-initial-cluster-token etcd-cluster \
-initial-cluster etcd0=http://master:2380,etcd1=http://dockertest4:2380 \
-initial-cluster-state new
(2)minion节点上的操作,
将etcd的etcd和etcdctl文件拷贝到/home/docker/xu/etcd目录下,然后在该目录下创建run.sh文
件,文件内容如下:
killall -9 etcd
./etcd \
-name etcd1 \
-data-dir etcd1.etcd \
-initial-advertise-peer-urls http://dockertest4:2380 \
-listen-peer-urls http://dockertest4:2380 \
-listen-client-urls http://dockertest4:2379,http://127.0.0.1:2379 \
-advertise-client-urls http://dockertest4:2379 \
-initial-cluster-token etcd-cluster \
-initial-cluster etcd0=http://master:2380,etcd1=http://dockertest4:2380 \
-initial-cluster-state new
(4)在master节点的/home/docker/xu/etcd目录下执行./etcdctl member list命令,如果环境搭建成功会看见如下输出
root@master:/home/docker/xu/etcd# ./etcdctl member list
a8393743a0bdfe3: name=etcd1 peerURLs=http://dockertest4:2380 clientURLs=http://dockertest4:2379 isLeader=true
c93427c50eaf2937: name=etcd0 peerURLs=http://master:2380 clientURLs=http://master:2379 isLeader=false
(1)将kubernetes\server\bin中的所有文件分别拷贝到master和minion节点的/home/docker/xu/k8s目录下
(2)在master节点的/home/docker/xu/k8s目录下编辑run-apiserver.sh、run-controller-manager.sh和run-scheduler.sh文件,文件内容分别如下:
./kube-apiserver --address=0.0.0.0 --insecure-port=8080 --service-cluster-ip-range='192.168.110.0/24' --kubelet_port=10250 --v=0 --logtostderr=true --etcd_servers=http://192.168.110.151:2379 --allow_privileged=false >> /opt/k8s/kube-apiserver.log 2>&1 &
./kube-controller-manager --v=0 --logtostderr=false --log_dir=/opt/k8s/kube --master=192.168.110.151:8080 >> /opt/k8s/kube-controller-manager.log 2>&1 &
./kube-scheduler --master='192.168.110.151:8080' --v=0 --log_dir=/opt/k8s/kube >> /opt/k8s/kube-scheduler.log 2>&1 &
需要给上述三个文件赋予可执行权限:chmod +x 文件名
(3)在master节点的/home/docker/xu/k8s目录下编辑run-proxy.sh、run-let.sh文件,文件内容分别如下:
./kube-proxy --logtostderr=true --v=0 --master=http://192.168.110.151:8080 --hostname_override=192.168.110.152 >> /opt/k8s/kube-proxy.log
./kubelet --logtostderr=true --v=0 --allow-privileged=false --log_dir=/opt/k8s/logs/kube --address=0.0.0.0 --port=10250 --hostname_override=192.168.110.152 --api_servers=http://192.168.110.151:8080 >> /opt/k8s/kube-kubelet.log
注意:需要在/opt目录下创建k8s文件夹,并在k8s文件夹中创建相应的日志文件
需要给上述三个文件赋予可执行权限:chmod +x 文件名
(4)在master的 /home/docker/xu/k8s执行如下命令:./run-apiserver.sh
./run-controller-manager.sh
./run-scheduler.sh
(5)在minion节点的/home/docker/xu/k8s执行如下命令
./run-proxy.sh
./run-let.sh
(6)在master节点的/home/docker/xu/k8s执行如下命令,如果有下面的输出,说明集群搭建成功:
root@master:/home/docker/xu/kubernetes/server/bin# kubectl get nodes
NAME STATUS AGE
192.168.110.152 Ready 1d
root@master:/home/docker/xu/kubernetes/server/bin# kubectl get cs
NAME STATUS MESSAGE ERROR
controller-manager Healthy ok
scheduler Healthy ok
etcd-0 Healthy {"health": "true"}
root@master:/home/docker/xu/kubernetes/server/bin# kubectl cluster-info
Kubernetes master is running at http://localhost:8080
To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
(1)实验描述
试验中会会创建两个pod,其中一个pod回去连接另一个pod进行通信
(2)在master节点的/home/docker/xu/test目录下创建mysql.yaml、tomcat.yaml,文件内容分别如下:
apiVersion: v1
kind: Service
metadata:
name: mysql
spec:
ports:
- port: 3306
selector:
app: mysql_pod
---
apiVersion: v1
kind: ReplicationController
metadata:
name: mysql-deployment
spec:
replicas: 1
template:
metadata:
labels:
app: mysql_pod
spec:
containers:
- name: mysql
image: 192.168.110.151:5000/mysql
imagePullPolicy: IfNotPresent
ports:
- containerPort: 3306
env:
- name: MYSQL_ROOT_PASSWORD
value: "123456"
apiVersion: v1
kind: Service
metadata:
name: hpe-java-web
spec:
type: NodePort
ports:
- port: 8080
nodePort: 31002
selector:
app: hpe_java_web_pod
---
apiVersion: v1
kind: ReplicationController
metadata:
name: hpe-java-web-deployement
spec:
replicas: 1
template:
metadata:
labels:
app: hpe_java_web_pod
spec:
containers:
- name: myweb
image: 192.168.110.151:5000/tomact8
imagePullPolicy: IfNotPresent
ports:
- containerPort: 8080
(3)创建tomcat镜像
Dockerfile文件内容如下
FROM tomcat
MAINTAINER xuguokun <[email protected]>
ADD K8S.war /usr/local/tomcat/webapps/
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@page import="java.sql.*" %>
Insert title here
卡号
<%
String driverClass="com.mysql.jdbc.Driver";
String ip=System.getenv("MYSQL_SERVICE_HOST");
String port=System.getenv("MYSQL_SERVICE_PORT");
System.out.println(port+"asasdfasdfasdfasdfasd");
//String ip = "localhost";
//String port = "3306";
Connection conn;
try{
Class.forName(driverClass);
conn = java.sql.DriverManager.getConnection("jdbc:mysql://"+ip+":"+port+"/bms", "root","123456");
Statement stmt=conn.createStatement();
String sql="select * from bms_appuser";
ResultSet rs=stmt.executeQuery(sql);
while(rs.next()){
%>
<%=rs.getString(3) %>
<%
}
}
catch(Exception ex){
ex.printStackTrace();
}
%>
创建tomcat镜像的命令(在Dockerfile和K8S.war所在的目录执行)
docker build -t 192.168.110.151:5000/tomcat8
(4)创建pod,在test目录下执行如下命令
kubectl create -f mysql.yaml和kubectl create -f tomcat.yaml
(5)然后在master节点的test目录下执行如下命令,并得到相应的输出,说明环境搭建成功
root@master:/home/docker/xu/test# kubectl get pods
NAME READY STATUS RESTARTS AGE
hpe-java-web-deployement-w8kts 1/1 Running 0 12h
mysql-deployment-ovz6y 1/1 Running 0 12h
root@master:/home/docker/xu/test# kubectl get service
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
hpe-java-web 192.168.110.101 8080/TCP 12h
kubernetes 192.168.110.1 443/TCP 1d
mysql 192.168.110.158 3306/TCP 12h
root@master:/home/docker/xu/test# kubectl exec hpe-java-web-deployement-w8kts -- printenv | grep SERVICE
MYSQL_SERVICE_HOST=192.168.110.158
KUBERNETES_SERVICE_PORT_HTTPS=443
HPE_JAVA_WEB_SERVICE_PORT=8080
MYSQL_SERVICE_PORT=3306
HPE_JAVA_WEB_SERVICE_HOST=192.168.110.101
KUBERNETES_SERVICE_HOST=192.168.110.1
KUBERNETES_SERVICE_PORT=443
(7)然后在152的节点的浏览器中访问http://192.168.110.101:8080/K8S/index.jsp
页面显示内容如下:
卡号
00901016
0090051F
00900E33
4、实验结束