乐趣区

关于kubernetes:k8s部署应用入门之kubectl-apply

k8s 是一个容器利用的根底运行环境,那么对于初学者来说,如何在 k8s 上部署本人的利用呢?本文介绍几种最简略的,适宜初学者理解部署过程的几种办法:

  • 通过 kubectl apply 间接部署
  • 通过 helm 部署

通过 kubectl apply 间接部署

kubectl 间接部署容器 Pod

对于如何装置 kubectl,以及如果通过 kubectl 连贯 k8s 的内容,本章不再赘述,这里假设大家曾经装置了 kubectl 并可能连贯 k8s 集群。

kubectl apply是一种申明式的 API 调用办法,通过将 pod 的配置编写在一份 yml 文件中,再调用 API,进行 pod 部署的形式,区别于 docker 的命令行模式,例如docker run xxx.

申明式 API 调用的益处是,对于同一份 yml 申请,在降级过程中,不须要对旧的资源进行操作,apply 命令会使得 k8s 自行对已有资源进行降级操作。

上面是一份部署 mysql 的实例:

apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2
kind: Deployment
metadata:
  name: mysql
spec:
  selector:
    matchLabels:
      app: mysql
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: mysql
    spec:
      containers:
      - image: mysql:5.6
        name: mysql
        env:
          # Use secret in real usage
        - name: MYSQL_ROOT_PASSWORD
          value: password
        ports:
        - containerPort: 3306
          name: mysql

通过 kubectl 命令间接部署:kubectl apply -f mysql.yml, 留神,如果不指定 namespace,则默认 pod 会部署在 default 命名空间下。

~ kubectl get pod
NAME                     READY   STATUS      RESTARTS   AGE
mysql-65c76b9ccb-5wlg2   1/1     Running     0          13m

删除 pod

~ kubectl delete pod mysql-65c76b9ccb-5wlg2
pod "mysql-65c76b9ccb-5wlg2" deleted

# Deployment 调度器会使得 pod 反复创立,如果要彻底删除资源,须要删除 deployment
~ kubectl delete deployment mysql

拜访 pod

pod 的 IP 地址是变动的,每次部署都会获取到新的 IP 地址,那么如何拜访 pod,在集群外部能够通过 service 来进行拜访,service 是 k8s 中用来代理一组 pod 的 API 对象,代理的形式是通过 lable selector。

以下是拜访 mysql 的示例:

apiVersion: v1
kind: Service
metadata:
  name: mysql
spec:
  ports:
  - port: 3306
  selector:
    app: mysql
  clusterIP: None 

spec.clusterIP: None 示意这是一个无头 Service,不会获取到 clusterIP, 则内部无奈通过 service 拜访这个 pod。

~ kubectl apply -f mysql.svc.yml

~ kubectl get svc
NAME         TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)    AGE
kubernetes   ClusterIP   10.96.0.1    <none>        443/TCP    16d
mysql        ClusterIP   None         <none>        3306/TCP   7m2s

测试一下集群外部的容器拜访,这里启动一个长期的容器,来执行一段 mysql 语句

~ kubectl run -it --rm --image=mysql:5.6 --restart=Never mysql-client -- mysql -h mysql -ppassword -e 'select now()'
Warning: Using a password on the command line interface can be insecure.
+---------------------+
| now()               |
+---------------------+
| 2021-06-17 02:06:48 |
+---------------------+
pod "mysql-client" deleted

以上,创立的 mysql 能够被通过 mysql 端点进行拜访了。

退出移动版