K8s in action知识点
2019-08-13 10:24:42 7 举报
AI智能生成
K8s in action
作者其他创作
大纲/内容
2使用Kubernetes
和Docker
和Docker
Docker
安装
choco install docker -y
构建镜像
创建应用
创建Dockerfile
构建
docker build -t kubia .
镜像分层
管理镜像
运行
docker run <image>:<tag>
测试
curl localhost:8080
列出镜像
docker images
删除镜像
docker rmi <镜像ID>
附加tag
docker tag kubia luksa/kubia
推送至仓库
docker push luksa/kubia
管理容器
列出容器
docker ps
进入容器
docker exec -it kubia-container bash
停止容器
docker stop <CONTAINER ID>
配置Kubernetes集群
本地单节点
minikube
kubectl
Google Kubernetes Engine
运行应用
kubectl run kubia --image=luksa/kubia --port=8080 --generator=run/v1
列出pods
kubectl get pods
创建服务对象
kubectl expose rc kubia --type=LoadBalancer --name kubia-http
列出服务
kubectl get services / kubectl get svc
通过外部IP访问
curl <外部IP>:8080
逻辑视图
水平伸缩
列出rc
kubectl get replicationcontrollers
表达愿望
kubectl scale rc kubia --replicas=3
查看结果
kubectl get rc
kubectl get pods
测试
curl 104.155.74.57:8080 多次,看是否负载均衡
列出pod时显示pod IP 和节点
kubectl get pods -o wide
查看pod细节
kubectl describe pod kubia-hczj1
找到dashboard
GKE集群的
kubectl cluster-info | grep dashboard
找到用户名/密码
gcloud container clusters describe kubia | grep -E "(username|password):"
minikube的
minikube dashboard
4部署托管的pod
5服务
6卷
7Config和Secret
给容器配置参数的方式
Dockerfile中定义
3种
RUN
CMD
ENTRYPOINT
shell形式
<instruction> <command>
exec形式
<instruction> ["executable", "param1", "param2", ...]
传递命令行参数
命令格式
在Docker中定义命令与参数
在Kubernetes中覆盖命令和参数
设置自定义环境变量
通过特殊卷将配置文件挂载到容器中
gitRepo卷作为配置源
ConfigMap
Secret
1基本概念
容器隔离机制
Linux命名空间
Mount (mnt)
Process ID (pid)
Network (net)
Inter-process communication (ipc)
UTS
User ID (user)
Linux控制组 cggroups
核心功能
集群架构
控制面板 master
etcd
API服务器
Scheduler
Controller
Manager
Manager
工作节点
Kubelet
Kube-proxy
容器运行时
能做什么
程序员视角
运维人员视角
优点
3pod
为什么
使用pod封装容器
使用pod封装容器
让每个进程运行于自己的容器中
同一pod中容器之间部分隔离,共享ip和端口空间
平坦pod间网络
将多层应用分散到多个pod中
基于扩容考虑而分割到多个pod中
何时使用多个容器
何时在pod中使用多个容器
以yaml或json文件创建pod
查看pod的yaml
kubectl get po kubia-zxzij -o yaml
查看pod的json
kubectl get po kubia-zxzij -o json
pod定义的组成部分
metadata
spec
status
使用kubectl explain
kubectl explain pods
kubectl explain pod.spec
创建pod
kubectl create -f kubia-manual.yaml
查看日志
kubectl logs kubia-manual
kubectl logs kubia-manual -c kubia
向pod发送请求
端口转发方式
kubectl port-forward kubia-manual 8888:8080
另一个终端中运行
curl localhost:8888
服务方式
kubectl expose rc kubia-manual --type=LoadBalancer --name kubia-http
用标签组织pod
创建pod时指定标签
编写带标签的yaml
创建
kubectl create -f kubia-manual-with-labels.yaml
查看
kubectl get po --show-labels
kubectl get po -L creation_method,env
修改现有标签
新增
kubectl label po kubia-manual creation_method=manual
更改
kubectl label po kubia-manual creation_method=manual --overwrite
标签选择器
列出pod
kubectl get po -l creation_method=manual
kubectl get po -l creation_method=manual,env=beta
kubectl get po -l env
kubectl get po -l '!env'
kubectl get po -l creation_method!=manual
kubectl get po -l env in (prod,devel)
kubectl get po -l env notin (prod,devel)
使用标签和选择器来约束pod调度
使用标签分类工作节点
kubectl label node gke-kubia-001 gpu=true
编写yaml,将pod调度到特定节点
使用命名空间对资源分组
列出命名空间
kubectl get ns
kubectl get po --namespace kube-system
创建命名空间
从yaml创建
从命令创建
kubectl create namespace custom-namespace
创建资源时指定命名空间
kubectl create -f kubia-manual.yaml -n custom-namespace
命名空间提供的隔离
删除pod
kubectl delete po kubia-gpu
用标签选择器删除pod
kubectl delete po -l rel=canary
通过删除命名空间删除pod
kubectl delete ns custom-namespace
能删除命名空间中的所有pod,但保留命名空间吗?
但有时就是需要通过删除所有pods,以使pods新建
kubectl delete po --all
删除命名空间中的(几乎)所有资源
kubectl delete all --all
0 条评论
下一页