共计 1832 个字符,预计需要花费 5 分钟才能阅读完成。
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
端点进行拜访了。