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/v1beta2kind: Deploymentmetadata:  name: mysqlspec:  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 podNAME                     READY   STATUS      RESTARTS   AGEmysql-65c76b9ccb-5wlg2   1/1     Running     0          13m

删除pod

~ kubectl delete pod mysql-65c76b9ccb-5wlg2pod "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: v1kind: Servicemetadata:  name: mysqlspec:  ports:  - port: 3306  selector:    app: mysql  clusterIP: None 

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

~ kubectl apply -f mysql.svc.yml~ kubectl get svcNAME         TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)    AGEkubernetes   ClusterIP   10.96.0.1    <none>        443/TCP    16dmysql        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端点进行拜访了。