kubenetes权威指南第一章的demo环境配置
系统环境
操作体统版本 | ip |
---|---|
centos7.2 | 10.22.1.51 |
#关闭虚拟内存
swapoff -a
sed -i 's/.*swap.*/#&/' /etc/fstab
#修改内核参数
cat >/etc/sysctl.d/k8s.conf<
二、安装kubernetes组件
yum install -y etcd kubernetes
安装kubenetes会直接自动帮我们安装docker,会安装kube-apiserver、kube-controller-manager、kube-scheduler、kubelet、kube-proxy
启动各个组件
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
systemctl enable etcd
systemctl enable docker
systemctl enable kube-apiserver
systemctl enable kube-controller-manager
systemctl enable kube-scheduler
systemctl enable kubelet
systemctl enable kube-proxy
三、 开启demo环境
1.创建mysql的RC定义文件 mysql-rc.yaml
apiVersion: v1
kind: ReplicationController
metadata:
name: mysql #RC的名称,全局唯一
spec:
replicas: 1 #pod副本的期待数量
selector:
app: mysql #符合目标的Pod拥有此标签
template: #根据此模板创建Pod的副本(实例)
metadata:
labels:
app: mysql #pod副本拥有的标签,对应的RC的Selector
spec:
containers: #pod内容器的定义部分
- name: mysql #容器的名称
image: mysql:5.7 #容器对应的Docker Image
imagePullPolicy: IfNotPresent
ports:
- containerPort: 3306 #容器应用监听的端口号
env:
- name: MYSQL_ROOT_PASSWORD
value: "123456"
创建好这个文件之后,将他发布到kubebnetes集群中
# kubectl create -f mysql-rc.yaml
# kubectl get rc #查看刚刚创建的RC
# kubectl get pods #查看pod的运行情况
2.创建一个与之关联的service
我们创建一个与之关联的Kubernetes Service-MySQL的定义文件:mysql-svc.yaml
apiVersion: v1
kind: Service #类型是service
metadata:
name: mysql #service的全局唯一名称
spec:
ports:
- port: 3306 #service提供服务的端口号
selector: #service 对应的Pod拥有这里定义的标签
app: mysql
创建service
#kubectl create -f mysql-svc.yaml #创建service
#kubectl get svc #查看service状态
3.创建myweb容器
创建RC文件myweb-rc.yaml
apiVersion: v1
kind: ReplicationController
metadata:
name: myweb
spec:
replicas: 2
selector:
app: myweb
template:
metadata:
labels:
app: myweb
spec:
containers:
- name: myweb
image: kubeguide/tomcat-app:v1
ports:
- containerPort: 8080
发布到kubebnetes集群中
# kubectl create -f mysql-rc.yaml
# kubectl get rc #查看刚刚创建的RC
# kubectl get pods #查看pod的运行情况
创建与之对应的service文件myweb-svc.yaml
apiVersion: v1
kind: Service
metadata:
name: myweb
spec:
type: NodePort
ports:
- port: 8080
nodePort: 30001
selector:
app: myweb
type=NodePort和nodePort=30001的两个属性,表明此Service开启了NodePort方式的外网访问模式
创建service
#kubectl create -f mysql-svc.yaml #创建service
#kubectl get svc #查看service状态
验证打开浏览器访问http://:30001/demo/
访问http://10.22.1.51:30001/demo
可以看到这么一个php页面就ok啦。
四、 本次安装所踩到的坑
下面来说说这次所踩到的坑:
1.创建pod的时候执行kubectl create -f mysql-rc.yaml
命令显示已经创建,但是并没有创建成功,没有pod也没有docker在运行。
修改 /etc/kubernetes/apiserver文件
#vim /etc/kubernetes/apiserver
#修改这一行KUBE_ADMISSION_CONTROL
去除 KUBE_ADMISSION_CONTROL 中的 SecurityContextDeny,ServiceAccount ,并重启kube-apiserver服务
2.访问时出现jdbc连接数据库错误
Error:com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
遇到这种情况一般先看代码里连接mysql是否有问题,我看到连接数据库的ip和端口号是在linux环境变量里指定MYSQL_SERVICE_HOST和MYSQL_SERVICE_PORT。 索性修改创建myweb的RC文件指定环境变量。
可是并没有用。发现时mysql版本的问题。。。
将mysql-rc.yaml里mysql版本指定为mysql5.7就OK了
apiVersion: v1
kind: ReplicationController
metadata:
name: mysql #RC的名称,全局唯一
spec:
replicas: 1 #pod副本的期待数量
selector:
app: mysql #符合目标的Pod拥有此标签
template: #根据此模板创建Pod的副本(实例)
metadata:
labels:
app: mysql #pod副本拥有的标签,对应的RC的Selector
spec:
containers: #pod内容器的定义部分
- name: mysql #容器的名称
image: mysql:5.7 #容器对应的Docker Image
imagePullPolicy: IfNotPresent
ports:
- containerPort: 3306 #容器应用监听的端口号
env:
- name: MYSQL_ROOT_PASSWORD
value: "123456"
参考链接:
https://blog.csdn.net/golduty2/article/details/80625001
https://blog.csdn.net/yinanmo5569/article/details/81352578