K8S安装mysql及远程连接

目录

写在前面

1.安装mysql

2.登录mysql

3.远程访问

4.一些命令

5.参考文献


写在前面

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

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

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

这里要说一下,一般情况下,这里可能会遇到问题,在使用“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”命令,显示如下:

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

docker exec -it 2a46168598bb bash

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

这就进入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.参考文献

【1】关于ContainerCreating不能变成running的博文

【2】kubernetes部署mysql

 

 

华为云配置k8s远程仓库的具体步骤如下: 1. 首先,您需要在华为云上创建一个容器仓库,用于存储您的镜像。您可以使用华为云容器镜像服务(CCE)或者云容器引擎(CCE)来创建容器仓库。 2. 在创建容器仓库时,您需要选择适合您的存储类型,例如公共或私有存储。您还可以选择存储的地域和命名空间。 3. 在创建容器仓库后,您需要将您的k8s集群与华为云容器仓库进行关联。您可以通过在k8s集群中创建一个secret来实现。在创建secret时,您需要提供华为云容器仓库的访问凭证,包括用户名和密码。 4. 创建secret后,您可以在k8s集群中的Deployment或Pod的配置文件中指定使用该secret来拉取镜像。您可以在配置文件中的imagePullSecrets字段中引用该secret。 通过以上步骤,您就可以成功配置华为云的k8s远程仓库,并在k8s集群中使用该仓库中的镜像了。请注意,具体的配置步骤可能会因为您使用的华为云产品和版本而有所不同,建议您参考华为云的官方文档或者咨询华为云的技术支持获取更详细的配置指导。 #### 引用[.reference_title] - *1* *3* [华为云k8s环境部署应用](https://blog.csdn.net/wdquan19851029/article/details/123445397)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [华为云部署K8s之容器技术--2镜像管理](https://blog.csdn.net/weixin_49994404/article/details/109593515)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值