体验Kubernetes

100 阅读4分钟

环境:CentOS 7.6

如果在部署过程中遇到了阻碍,请先看目录【你可能会踩的坑】,他可能会帮助你快速解决问题!

环境准备

  1. yum安装
[root@iZbp1edddjcueeu1zw5xv2Z ~]# yum install -y etcd kubernetes
  1. 更改docker配置
[root@iZbp1edddjcueeu1zw5xv2Z ~]# vim /etc/sysconfig/docker
OPTIONS='--selinux-enabled=false --insecure-registry=gcr.io --log-driver=journald --signature-verification=false'
  1. 修改Kubernetes配置
[root@iZbp1edddjcueeu1zw5xv2Z ~]# vim /etc/kubernetes/apiserver
#删除ServiceAccount
KUBE_ADMISSION_CONTROL="--admission-control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ResourceQuota"
  1. 启动Kubernetes
[root@iZbp1edddjcueeu1zw5xv2Z ~]# systemctl start etcd
[root@iZbp1edddjcueeu1zw5xv2Z ~]# systemctl start docker
[root@iZbp1edddjcueeu1zw5xv2Z ~]# systemctl start kube-apiserver
[root@iZbp1edddjcueeu1zw5xv2Z ~]# systemctl start kube-controller-manager
[root@iZbp1edddjcueeu1zw5xv2Z ~]# systemctl start kube-scheduler
[root@iZbp1edddjcueeu1zw5xv2Z ~]# systemctl start kubelet
[root@iZbp1edddjcueeu1zw5xv2Z ~]# systemctl start kube-proxy

安装MySQL

  1. 创建Deployment文件(yaml配置文件)

  2. 为了方便归类管理,可以先创建文件夹

[root@iZbp1edddjcueeu1zw5xv2Z ~]# mkdir mysql
[root@iZbp1edddjcueeu1zw5xv2Z ~]# mkdir tomcat
[root@iZbp1edddjcueeu1zw5xv2Z ~]# cd mysql
[root@iZbp1edddjcueeu1zw5xv2Z mysql]# vim mysql-deploy.yaml
  1. Deployment文件内容如下
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  labels:
    app: mysql
  name: mysql
spec:
  replicas: 1
  selector:
    matchLabels:
      app: mysql
  template:
    metadata:
      labels:
        app: mysql
    spec:
      containers:
      - image: mysql:5.7
        name: mysql
        ports:
        - containerPort: 3306
        env:
        - name: MYSQL_ROOT_PASSWORD
          value: "123456"
  1. 启动MySQL服务
[root@iZbp1edddjcueeu1zw5xv2Z mysql]# kubectl apply -f mysql-deploy.yaml 
deployment "mysql" created

查看MySQL启动状态

#查看deployment状态
[root@iZbp1edddjcueeu1zw5xv2Z mysql]# kubectl get deploy
NAME      DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
mysql     1         1         1            1           3m
#查看pod状态
[root@iZbp1edddjcueeu1zw5xv2Z mysql]# kubectl get pods
NAME          READY     STATUS    RESTARTS   AGE
mysql-zrh40   1/1       Running   0          13m

同时,你也可以通过docker命令来观察docker是否拉取了MySQL镜像且创建了一个容器

恭喜你,MySQL已经部署成功!接下来,我们还需要创建一个MySQL Service配置

  1. 创建Service
[root@iZbp1edddjcueeu1zw5xv2Z mysql]# vim mysql-svc.yaml
apiVersion: v1
kind: Service
metadata:
  name: mysql
spec:
  ports:
    - port: 3306
  selector:
    app: mysql
[root@iZbp1edddjcueeu1zw5xv2Z mysql]# kubectl apply -f mysql-svc.yaml 
service "mysql" created
  1. 查看状态
[root@iZbp1edddjcueeu1zw5xv2Z mysql]# kubectl get svc
NAME         CLUSTER-IP       EXTERNAL-IP   PORT(S)    AGE
kubernetes   10.254.0.1       <none>        443/TCP    4h
mysql        10.254.141.101   <none>        3306/TCP   2m

至此,一个可使用的MySQL已经准备就绪了,接下来,我们创建一个Tomcat应用。

安装Tomcat应用

  1. 创建Deployment文件
[root@iZbp1edddjcueeu1zw5xv2Z mysql]# cd ../tomcat/
[root@iZbp1edddjcueeu1zw5xv2Z tomcat]# vim myweb-deploy.yaml
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  labels:
    app: myweb
  name: myweb
spec:
  replicas: 2
  selector:
    matchLabels:
      app: myweb
  template:
    metadata:
      labels:
        app: myweb
    spec:
      containers:
      - image: kubeguide/tomcat-app:v1
        name: myweb
        ports:
        - containerPort: 8080
        env:
        - name: MYSQL_SERVICE_HOST
          value: 10.254.141.101
  1. 创建应用
[root@iZbp1edddjcueeu1zw5xv2Z tomcat]# kubectl apply -f myweb-deploy.yaml 
deployment "myweb" created
  1. 查看状态
# 查看Deployment
[root@iZbp1edddjcueeu1zw5xv2Z tomcat]# kubectl get deploy
NAME      DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
mysql     1         1         1            1           20m
myweb     2         2         2            2           30s

#查看Pod
[root@iZbp1edddjcueeu1zw5xv2Z tomcat]# kubectl get pods
NAME                     READY     STATUS    RESTARTS   AGE
mysql-1892802124-pr7z8   1/1       Running   0          21m
myweb-3898990965-49bz9   1/1       Running   0          1m
myweb-3898990965-80pzk   1/1       Running   0          1m

可以看到,当我们在yaml配置文件中将变量replicas设置为2时,Kubernetes会创建l两个个不同名称的Pod,这个Pod我们暂且可以把它当作容器来看待。

  1. 创建Service
[root@iZbp1edddjcueeu1zw5xv2Z tomcat]# vim myweb-svc.yaml
apiVersion: v1
kind: Service
metadata:
  name: myweb
spec:
  type: NodePort
  ports:
    - port: 8080
      nodePort: 30001
  selector:
    app: myweb
  1. 创建Service
[root@iZbp1edddjcueeu1zw5xv2Z tomcat]# kubectl apply -f myweb-svc.yaml
service "myweb" created
  1. 查看状态
[root@iZbp1edddjcueeu1zw5xv2Z tomcat]# kubectl get services
NAME         CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
kubernetes   10.254.0.1      <none>        443/TCP          1h
mysql        10.254.141.101    <none>        3306/TCP         25m
myweb        10.254.82.125   <nodes>       8080:30001/TCP   16s

至此,你应该可以通过浏览器http://物理机IP:30001/demo访问应用!

image-20231211175345490.png

你可能会踩的坑

  1. 外网无法访问,但内网可以正常访问

​ 解决方案:执行命令:iptables -P FORWARD ACCEPT

github.com/feiskyer/ku…

  1. 镜像拉取失败

    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)"

    解决方案:执行以下命令

    cd /etc/docker/certs.d/registry.access.redhat.com/
    
    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
    
  2. 拉取MySQL失败

    更换阿里云镜像源:

    sudo tee /etc/docker/daemon.json <<-'EOF'
    {
      "registry-mirrors": ["**改成你的镜像地址**"]
    }
    EOF
    
    sudo systemctl daemon-reload
    
    sudo systemctl restart docker