> cd k8s-demo-image-0.1
> docker build -t k8s-demo:0.1 .
> docker tag k8s-demo:0.1 riskers/k8s-demo:0.1
创建一个名为 regsecret 的 Secret :
> kubectl create secret docker-registry <registry-name> --docker-server=<your-registry-server> --docker-username=<your-name> --docker-password=<your-pword> --docker-email=<your-email>
https://k8smeetup.github.io/docs/tasks/configure-pod-container/pull-image-private-registry/
这里我用的是:
> kubectl create secret docker-registry regsecret --docker-server=locahost --docker-username=riskers --docker-password=123 --docker-email=617273330@qq.com
> cd k8s-demo-pod
> kubectl create -f pod.yaml
> kubectl get pods
Pod 是不能从外部直接访问的 (除非用 kubectl port-forward 等方案),要把服务暴露出来给用户访问,需要创建一个服务 (Service)。Service 的作用主要是做反向代理 (Reverse Proxy) 和负载均衡 (LB),负责把请求分发给后面的 Pod。
> cd k8s-demo-service
> kubectl create -f svc.yaml
> kubectl get svc k8s-demo-svc
访问 service:
# 1. 得到 internal-ip 地址
> kubectl get nodes -o wide
# 2. 访问 31000 端口 (在 svc.yaml 中指定)
> curl <internal-ip>:31000
ReplicaSet 是副本的意思,简称 RS ,实际上多使用 Deployment 。
一个 Deployment 拥有多个 Replica Set,而一个 Replica Set 拥有一个或多个 Pod
- 创建 deployment:
> cd k8s-demo-deployment
> kubectl create -f deployment_0.1.yaml
> kubectl get deployments
- 构建新镜像:
> cd k8s-demo-image-0.2
> docker build -t riskers/k8s-demo:0.2 .
- 更新版本:
> kubectl apply -f deployment_0.2.yaml
-
访问
<internal-ip>:31000
:Hello k8s!
-
回滚:
# 查看发布历史
> kubectl rollout history deployment k8s-demo-deployment
# 回滚 (--to-revision 指定版本)
> kubectl rollout undo deployment k8s-demo-deployment --to-revision=2
- 缩容 / 扩容:
# 缩容
> kubectl scale --replicas=2 -f deployment_0.2.yaml
# 扩容
> kubectl scale --replicas=7 -f deployment_0.2.yaml
这是手动缩容、扩容的,还有一些自动方案 (HPA) 不做介绍
> cd k8s-demo-job
> kubectl apply -f job.yaml
# 获得 Job 的 Pod 名字
> kubectl get pods --selector=job-name=k8s-demo-job
NAME READY STATUS RESTARTS AGE
k8s-demo-job-868gz 0/1 Completed 0 2m40s # STATUS是完成的,因为这是一次性的
# 查看 Pod 日志,可以看到代码中 print 的语句
> kubectl logs k8s-demo-job-868gz
> kubectl apply -f cronjob.yaml
> kubectl get cronjobs
> kubectl delete -f cronjob.yaml
> cd k8s-demo-configmap
> kubectl create -f config_map.yaml
> kubectl apply -f mysql.yaml
# 进入容器
> kubectl exec -it mysql-server -- /bin/bash
> root@mysql-server:/# env | grep MYSQL_SERVER_SERVICE_PORT
MYSQL_SERVER_SERVICE_PORT=3308
MySQL 账号密码如果也是这种明文的方式存储很不安全。就需要用到 Secret 这种资源对象了:Secret 用来保存敏感信息,例如密码、密钥、各种 Token 等等
> kubectl apply -f secret.yaml
> kubectl get secret k8s-demo-secret --output=jsonpath='{.data}'
map[passwd:cWF6eHN3]
> kubectl exec -it mysql-server -- /bin/bash
> root@mysql-server:/# env|grep PASS
MYSQL_ROOT_PASSWORD=qazxsw
> cd k8s-demo-volume
# 把本机的 /tmp/k8s-demo 目录挂在了容器的 /data
> kubectl apply -f pod.yaml
> kubectl exec -it k8s-demo sh
/ echo Hello! > /data/1.txt
/ exit
> cat /tmp/k8s-demo/1.txt
注意统一版本:
这时候 minikube 就算开启 dashboard ,里面的东西也是对不上的