k8s linux镜像 telnet,K8S安装mysql及远程连接-Go语言中文社区

目录

写在前面

在整个安装过程中,遇到三个问题,分别如下:

1) 在设置node节点上mysql的端口时候,如果端口太大,发现会报错,提示端口范围只允许在30000-32767之间,出现这个问题在于master的apiserver中KUBE_API_ARGS参数没设置,这个最好修改下,如下:

#这里修改端口范围,默认是30000-32767,创建service时超出会报错

KUBE_API_ARGS="--service-node-port-range=20000-65535"

2) 创建好server和pod之后,在查看状态的时候发现,死活一直是containercreationg这个状态,就是无法正常的running。按照网上部分的一些办法也一直搞不赢。

3) mysql安装成功之后,防火墙关闭了,也给用户赋权了,但是就是死活无法远程连接。

虽然安装过程中磕磕绊绊,遇到各种问题,但是回过头来看一下,发现基于docker安装mysql简直高效、快捷有神速啊,简单些两个配置文件,跑一下就OK,技术真是日新月异,大放光彩。

下面记录下安装过程以及遇到问题时候的处理方案。

1.安装mysql

在master上,切到根目录,然后新建mysql目录,cd到mysql目录后,新建mysql-rc.ymal 和mysql-svc.yaml 两个文件。内容分别如下:

vi mysql-rc.ymal

apiVersion: v1

kind: ReplicationController

metadata:

name: mysql-rc

labels:

name: mysql-rc

spec:

replicas: 1

selector:

name: mysql-pod

template:

metadata:

labels:

name: mysql-pod

spec:

containers:

- name: mysql

image: mysql

imagePullPolicy: IfNotPresent

ports:

- containerPort: 3306

env:

- name: MYSQL_ROOT_PASSWORD

value: "root"

其中kind我们选择ReplicationController,还可以选择Replica Set或者Deployment管理Pod,这里不展开说,具体参考这里的说明,一般情况下,我们选择ReplicationController即可,不要使用单pod模式。

vi mysql-svc.yaml

apiVersion: v1

kind: Service

metadata:

name: mysql-svc

labels:

name: mysql-svc

spec:

type: NodePort

ports:

- port: 3306

protocol: TCP

targetPort: 3306

name: http

nodePort: 30306

selector:

name: mysql-pod

这里注意nodePort,我最开始设置的33306,但是在运行create的时候会报前面说的问题1,按照解决方式,修改下KUBE_API_ARGS然后重启下apiserver即可,重启命令如下:

for SERVICES in kube-proxy kubelet flanneld docker; do

systemctl restart $SERVICES

systemctl enable $SERVICES

systemctl status $SERVICES

done

文件创建好之后,下面开始开始创建镜像和运行容器,操作命令如下:

[root@k8s-master ~]# kubectl create -f mysql-rc.yaml

replicationcontroller "mysql-rc" created

[root@k8s-master ~]# kubectl create -f mysql-svc.yaml

service "mysql-svc" created

然后使用如下命令进行查看

f54d26b005560edb74511c675c87f721.png

这里要说一下,一般情况下,这里可能会遇到问题,在使用“kubectl describe pod mysql-rc-smjmh”命令进行查看错误信息

遇到的问题无外乎两类报错,如下:

Error syncing pod, kipping: failed to "StartContainer" for "POD" with ErrImagePull: "image pull failed for registry.access.redhat.com/rhel7/pod-infrastructure:latest, this may be because there are no credentials on this request. details: (open /etc/docker/certs.d/registry.access.redhat.com/redhat-ca.crt: no such file or directory)"

Error syncing pod, skipping: failed to "StartContainer" for "POD" with ImagePullBackOff: "Back-off pulling image "registry.access.redhat.com/rhel7/pod-infrastructure:latest""

第一个,是因为证书的问题,通过在node节点上使用如下命令查看,会发现是一个软连接到“/etc/rhsm/ca/redhat-uep.pem”,但是这个证书文件确实不存在。

ll /etc/docker/certs.d/registry.access.redhat.com/redhat-ca.crt

解决办法,在node节点上执行如下命令

yum install *rhsm*

执行完,再去看一下这个redhat-uep.pem文件是否存在,是会出现还不存在的情况,具体原因不做深究。解决办法如下:

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

继续在node节点上执行上面两个命令,就能搞定。

最后执行如下命令,这个很重要,有些博文没有提到这个,报错2一直无法消除。这里可能会出现安装慢的情况,可以反复试几次就行了。

docker pull registry.access.redhat.com/rhel7/pod-infrastructure:latest

都搞定之后,你会发现status变成Running正常状态了。

2.登录mysql

再node节点上,执行“docker ps -a”命令,显示如下:

8a251db94bf84f3d602d3df5d0428f7c.png

红圈标注的就是mysql的containet id,通过这个,我们来进入容器,执行如下命令:

docker exec -it 2a46168598bb bash

然后,就进入到容器了,这里很神奇,因为之前没接触过docker和容器化的东西,直到这里才发现容器的真谛,此时就感觉是进入了一个新的主机一样,可以查看容器的情况,同样,可以进行mysql的登录,像正常在主机上操作一样,如下所示:

2f91db8e6198684b89a8e5139dbdd6d2.png

这就进入mysql了,进入之后,设置mysql可以远程访问,网上一搜有很多的方式,这里贴一个供参考,进入之后执行如下命令:

alter user 'root'@'%' identified with mysql_native_password by'root';

alter user 'root'@'%' identified by 'youpassword';

或者

use mysql;

ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'youpassword';

flush privileges; #一定要刷新生效

然后 exit 退出mysql  .ctrl+p ctrl+q 从容器退出返回到node主机。

3.远程访问

本地打开Navicat,准备远程连接,输入node节点的IP:192.168.1.160,端口输入:30306,输入用户名、密码,但是你会发现,私活连接不上,一直报10060 unknow error。查了各种可能情况,死活就是连接不上。

按理说,防火墙关闭了,端口应该不会被限制了才对,但是就是连接不上,在master上执行telnet 192.168.1.160 30306 发现无法连接,问题找到了,防火墙已关闭,但是端口口没有开放,后来查了下,有人说CentOS7确实是这样。需要打开防火墙,设置30306端口可以访问,然后再关闭防火墙就行了!!!!操作如下:

firewalld:systemctl start firewalld #开启防火墙

firewall-cmd --zone=public --add-port=30306/tcp --permanent #设置30306放开

firewall-cmd --reload #重新加载配置文件

之后查看防火墙状态,然后再关闭防火墙,再重新试,发现OK了!!

至此,终于安装成功了!

4.一些命令

docker ps 查看目前运行的容器

5.参考文献

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值