定向拉取k8s镜像

docker pull registry.aliyuncs.com/google_containers/kube-apiserver:v1.18.1

docker pull
registry.aliyuncs.com/google_containers/kube-controller-manager:v1.18.1

docker pull registry.aliyuncs.com/google_containers/kube-scheduler:v1.18.1

docker pull registry.aliyuncs.com/google_containers/kube-proxy:v1.18.1

docker pull registry.aliyuncs.com/google_containers/pause:3.2

docker pull registry.aliyuncs.com/google_containers/etcd:3.4.3-0

docker pull registry.aliyuncs.com/google_containers/coredns:1.6.7

docker pull
registry.aliyuncs.com/google_containers/kubernetes-dashboard-amd64:v1.8.3

简称

namespace ------ ns

nodes ------ no

deployment ------ deploy

service ------ svc

configMap ------ cm

# master节点上获取token

kubeadm token create --print-join-command

# slave节点加入master节点

kubeadm join 192.168.151.57:6443 --token n1xp40.c2xmmxzj7fi6zb0i
--discovery-token-ca-cert-hash
sha256:e5435ed2f32c262fbc9b914fb951154aaef37a3255e80d4d99ca2267cda269d1

# 查看节点日志

journalctl -f -u kubelet

# 重置kube机器

kubeadm reset

# 查看所有信息

kubectl get all -n=kube-system

# 查看所有ns的pods运行情况

kubectl get pods --all-namespaces

# 查看具体信息

-o wide

# 查看所有名称空间

kubectl get namespaces

# 查看所有节点

kubectl get nodes

# 删除节点

kubectl delete nodes test03

# 查看ns=kube-system下所有pod

kubectl get pod --namespace=kube-system -o wide

kubectl get pod -n=kube-system -o wide

# 删除命名空间下的pod

kubectl delete pod kube-flannel-ds-amd64-v64sr -n kube-system

# 强制删除命名空间下的pod

kubectl delete pod kube-flannel-ds-amd64-znktd -n kube-system --grace-period=0
--force



# 查看pod描述信息

kubectl describe pod kube-flannel-ds-amd64-b9mzs -n kube-system

# 给pod打标签

kubectl label pod test01 app=node01

# 进入pod

kubectl exec -it test -- /bin/bash

# 通过配置文件名或stdin创建一个集群资源对象

kubectl create -f pod.yml

#Pod镜像拉取策略

ps: imagePullPolicy: IfNotPresent

Always 首先获取仓库

IfNotPresent 优先使用本地

Never 只使用本地镜像

#列出该namespace中的所有pod,包括未初始化的

kubectl get pods --include-uninitialized --all-namespaces

# 删除pod

kubectl delete pod front -n=mip

资源控制器

RC(ReplicationController) 确保容器应用的副本数保持在用户定义的副本数

RS(ReplicaSet) 支持集合式的selector + RC功能

Deployment 声明式方法,滚动更新,扩容缩容

DeamonSet 全部node上只有一个pod,守护进程

Job 负责批处理任务

CronJob 定时计划任务

StatefulSet 解决有状态服务,稳定的持久化存储(docker更多是部署无状态服务,k8s部署有状态服务)

Horizontal Pod Autoscaling 应用资源使用率高峰低谷,提高整体利用率,自动调整service中的pod个数

```​

# 资源清单书写规则查询

kubectl explain rs

# 创建单独的pod

apiVersion: v1

kind: Pod

# 创建多个副本的pods

apiVersion: apps/v1

kind: ReplicaSet

这个版本需要填写selector

# 打印pod对应的标签

kubectl get pods -n=mip -o wide --show-labels

# 修改标签(因为副本引用以标签为准,修改标签之后,会重新创建原始标签的pod)

kubectl label pod front-tr2gw tier=front1 --overwrite=True

# 查询所有RS

kubectl get rs --all-namespaces



区别:pod和rs用create,deployment用apply

# 记录每步更新状态

kubectl apply -f deployment.yml --record

# deployment扩容

kubectl scale deployment front --replicas=3 -n mip

# deployment滚动更新,需要创建新的RS,新老交替达到滚动更新的目的

kubectl set image deployment/front mip-front=nginx:v5

# 如果新版本有问题,需要回滚

kubectl rollout undo deployment/front

Service(通过匹配Label Selector标签选择器匹配一组pod,对外访问服务的机制)

ClusterIp 自动分配一个仅cluster内部可以访问的虚拟IP

NodePort 在ClusterIp基础上,每台机器绑定一个端口

LoadBalancer 在NodePort基础上,借助cloud provider创建一个负载均衡器,并将请求转发到NodePort上

ExternalName (kubectl create -f)其他都是apply,dns别名操作,将外部的流量引入集群内布



# 可以通过这种方式删除资源

kubectl delete -f service.yml

存储

configMap (cm) 提供了向容器注入配置信息的机制

Secret

Volume

Persistent Volume

# 创建configMap(目录下的文件会被创建,或指定文件)

kubectl create configmap gconfig --from-file=目录/文件

# 查看configMap

kubectl get cm gconfig -o yaml

# 使用字面值创建

kubectl create configmap mconfig --from-literal=c="cc" --from-literal=d="dd"

# 可以通过资源清单书写configmap

kubectl apply -f configmap.yml

# pod中使用configMap

1.pod中替代环境变量



# 热更新configMap(容器中对应的cm也会随之更新)

kubectl edit configmap cconfig

# configmap更新后滚动更新pod

kubectl patch deployment test-1 --patch



# 容器崩溃时,k8s会以镜像最初的状态去重启,而docker的容器不会清除里面的数据



# volume支持很多卷类型 用最多的hostPath

emptyDir 暂存空间 ,可用于多个容器共享同一个目录,且该目录不需要挂载外部的

hostPath



企业微信截图_16076921511799.png

亲和性(节点亲和性)

硬策略(required):在pod上设置的硬策略,如果符合即在node上运行,不符合即不运行

软策略(preferred):在pod上设置的软策略,如果符合即在node上运行,不符合即考虑其他节点运行

可以设置权重weight

# 获取所有node节点标签

kubectl get node --show-labels

企业微信截图_1608111597325.png

企业微信截图_16081123926924.png

软策略,node03不存在,会在其他节点生成pod

设置了亲和性,pod应该就可以分配在master上了

企业微信截图_16081118292886.png

亲和性(pod亲和性)

pod之间是否亲和,是以两个pod是否要处于同一个node节点来判断的

企业微信截图_16081126843025.png

企业微信截图_16081130569413.png

topologykey 设置了同一个node是同一个拓扑域

污点 (给node设置污点)Taint,使节点可以排斥一类特定的pod

容忍(给pod设置容忍)Toleration



设置污点 kubectl taint给node节点

污点的组成 key=value:effect

value可以为空,effect可以描述污点的作用

# 设置污点

kubectl taint nodes test01 check=xjq:NoExecute

# 去除污点

kubectl taint nodes test01 check=xjq:NoExecute-

企业微信截图_1608108476842.png

企业微信截图_16081093832537.png

企业微信截图_1608109567701.png

operator Equal时,key/value/effect必须与node对应的相等

exist时,会忽略value值

固定节点调度

企业微信截图_16081110074242.png

企业微信截图_16081110815228.png

第二种需要node标签有type: backEndNode1,才会在该节点运行,否则处于挂起(pending)状态

如果多个node都有该标签,那么pod便会浮动选择到这个node上

Helm本质是让k8s的应用管理(Deployment,Service)可配置,能动态生成

类似YUM的包管理工具,是部署环境的流程封装

# 两个概念

chart:创建一个应用的信息集合,包括各种k8s对象的配置模板,参数定义,依赖关系,类似于yum软件安装包

release:是chart的运行实例,代表一个正在运行的应用

chart可以多次安装到同一个集群,每次安装都是一个release

# 两个组件

Helm客户端

Tiller服务器

# 重载守护进程

systemctl daemon-reload

# 查看k8s进程状态

systemctl status kubelet

yum install -y bind-utils

yum install -y ipvsadm

ipvsadm -Ln

配置文件

/run/flannel/subnet.env

技术
下载桌面版
GitHub
Gitee
SourceForge
百度网盘(提取码:draw)
云服务器优惠
华为云优惠券
腾讯云优惠券
阿里云优惠券
Vultr优惠券
站点信息
问题反馈
邮箱:[email protected]
吐槽一下
QQ群:766591547
关注微信