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
端点进行拜访了。