kubenetes demo环境配置
系统环境

操作体统版本ip
centos7.210.22.1.51
  1. 初始化环境
  2. 安装kubernetes组件
  3. 开启demo环境
  4. 本次安装所踩到的坑
    一、初始化环境
    安装一个centos7.2就可以开始啦。
#关闭虚拟内存
swapoff -a
sed -i  's/.*swap.*/#&/' /etc/fstab
#修改内核参数
cat >/etc/sysctl.d/k8s.conf<<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
vm.swappiness=0
EOF
modprobe br_netfilter
sysctl -p
#关闭防火墙
systemctl stop firewalld 
systemctl disable firewalld
setenforce 0
sed -i "s/^SELINUX=enforcing/SELINUX=disabled/g" /etc/sysconfig/selinux
sed -i "s/^SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
sed -i "s/^SELINUX=permissive/SELINUX=disabled/g" /etc/sysconfig/selinux
sed -i "s/^SELINUX=permissive/SELINUX=disabled/g" /etc/selinux/config
getenforce
添加 yum源
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

二、安装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

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐