1、k8s介绍
1、k8s概述
Kubernetes (简称k8s)是一个轻便的和可扩展的开源平台,用于管理容器化应用和服务。通过 Kubernetes 能够进行应用的自动化部署和扩缩容。2014年被Google开放,并在CNCF成功毕业!
2、k8s核心功能
开发者通过声明式API方式,提交一个应用列表到kubernetes主节点,kubernetes会将他们部署到集群的工作节点中。组件被部署到那个节点上对于开发者和系统管理员都不用关心。
-
自动装箱
基于容器对应用运行环境的资源配置要求自动部署应用容器
-
自我修复
当容器失败时,会对容器进行重启
当所部署的 Node 节点有问题时,会对容器进行重新部署和重新调度
当容器未通过监控检查时,会关闭此容器直到容器正常运行时,才会对外提供服务
-
扩缩容
命令、用户UI 或基于 CPU 等资源使用情况,对应用容器进行伸缩
-
服务发现
用户不需使用额外的服务发现机制,就能够基于 Kubernetes 自身能力实现服务发现和 负载均衡
-
滚动更新
-
版本回退
3、k8s集群架构
主节点: k8s控制和管理整个系统的控制面板
工作节点: 运行用户实际部署的应用
1、节点角色
**master:**对集群进行调度管理
- API Server:和其他节点进行通信
- Controller Manager:执行集群级别功能,如:复制组件、持续跟踪工作节点、处理节点失败等
- Schedule:调度应用(为应用的每个可部署组件分配一个工作节点)
**ETCD:**一个可靠的分布式数据存储,持久化存储集群配置
**node:**运行业务容器
- kubelet:与API Server通信,并管理所在节点的容器
- kube-proxy:负责组件之间的负载均衡网络流量
- CRI:容器运行时,Docker、Container等
2、kubeadm搭建k8s集群(Ubuntu)
学习时常用的k8s两种部署方式:
-
kubeadm
Kubeadm是一个K8s部署工具,提供kubeadm init和kubeadm join,用于快速部署Kubernetes集群。
官方地址:https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/
-
二进制包
从github下载发行版的二进制包,手动部署每个组件,组成Kubernetes集群。
1、kubeadm工具介绍
Kubeadm 降低部署门槛,但屏蔽了很多细节,遇到问题很难排查。如果想更容易可控,推荐使用二进制包部署 Kubernetes 集群;
有时间的可以去研究一下二进制方式部署 《完整的二进制部署k8s集群》)
kubeadm常用命令:
-
kubeadm init
:初始化一个master节点 -
kubeadm join
:将工作节点加入集群 -
kubeadm upgrade
:升级k8s版本 -
kubeadm token
:管理kubeadm join
使用的令牌 -
kubeadm reset
:清空kubeadm init
和kubeadm join
对主机所做的任何更改 -
kubeadm version
:打印kubeadm
版本 -
kubeadm alpha
:预览可用的新功能
服务器配置:
- 建议最小配置:2核CPU、2G内存、20G硬盘
- 最好可以连接外网,方便拉取镜像,不能,提前下载镜像导入节点
2、ubuntu配置静态IP
sudo su -
# 配置root密码
sudo passwd root
# 开启root远程登录
vi /etc/ssh/sshd_config
# 修改 #PermitRootLogin prohibit-password 为 PermitRootLogin yes
# 重启sshd服务
systemctl restart sshd
参照链接:https://www.myfreax.com/how-to-configure-static-ip-address-on-ubuntu-20-04/
在Ubuntu 20.04上,系统使用“predictable network interface names(可预测的网络接口名称)”标识网络接口。
- 识别要配置的以太网接口的名称
geray@geray:~$ ip link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: ens32: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000
link/ether 00:0c:29:55:50:d6 brd ff:ff:ff:ff:ff:ff
- 分配静态IP
Netplan配置文件存储在·/etc/netplan·目录中。 您可能会在此目录中找到一个或多个YAML文件。 文件的名称可能因安装程序而异。 通常,文件名为01-netcfg.yaml,50-cloud-init.yaml或NN_interfaceName.yaml
geray@geray:~$ ls /etc/netplan/
00-installer-config.yaml
geray@geray:~$ vim /etc/netplan/00-installer-config.yaml
- :set paste(ubuntu下的vim编辑器粘贴格式混乱)
在设备类型(ethernets)下,您可以指定一个或多个网络接口。 在此示例中,我们只有一个接口ens32,该接口被配置为从DHCP服务器dhcp4: yes获取IP寻址。
要将静态IP地址分配给ens32接口,请按照以下步骤编辑文件:
- 将DHCP设置为dhcp4: no。
- 指定静态IP地址。 在addresses:下,您可以添加一个或多个将分配给网络接口的IPv4或IPv6 IP地址。
- 指定网关。
- 在nameservers下,设置以下IP地址: 域名服务器。
# This is the network config written by 'subiquity'
network:
ethernets:
ens32:
dhcp4: false
addresses:
- 192.168.6.31/24
gateway4: 192.168.6.2
nameservers:
addresses: [8.8.8.8, 114.114.114.114]
version: 2
- gateway4地址根据自己的自行修改,我这里之前设置的是2(一般是1)
- 保存文件并应用更改
sudo netplan apply
- 验证更改
root@geray:~# ip addr show dev ens32
2: ens32: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 00:0c:29:55:50:d6 brd ff:ff:ff:ff:ff:ff
inet 192.168.6.31/24 brd 192.168.6.255 scope global ens32
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fe55:50d6/64 scope link
valid_lft forever preferred_lft forever
1. 初始化系统
sudo apt-get update
# 禁用swap分区(修改/etc/fstab,注释掉swap那行,持久化生效)
swapoff -a # 临时
sed -ri 's/.*swap.*/#&/' /etc/fstab # 永久
# 主机名规划
hostnamectl set-hostname <hostname>
hostnamectl set-hostname k8s-master-1
hostnamectl set-hostname k8s-node-1
# 同步时间
apt-get install ntpdate -y
ntpdate time.windows.com
# 确保每个机器不会自动suspend(待机/休眠)
sudo systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target
# 设定时区:
dpkg-reconfigure tzdata
# ---> 选择Asia -> OK -> 再选择Shanghai -> OK
3、安装docker
官方地址:https://docs.docker.com/engine/install/ubuntu/
1. Uninstall old versions
sudo apt-get remove docker docker-engine docker.io containerd runc
2. 设置存储库
sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg \
software-properties-common \
lsb-release
echo $?
3. 添加Docker官方的GPG密钥
# 官方
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
# 使用阿里公钥
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88 通过搜索指纹的后8个字符,验证您现在是否拥有带有指纹的密钥。
sudo apt-key fingerprint 0EBFCD88
4. 使用以下命令设置稳定版仓库
# 官方
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# 使用阿里云
sudo add-apt-repository \
"deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu/ \
$(lsb_release -cs) \
stable"
5. 安装引擎
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
如果要安装特定版本如下:例如:5:20.10.73-0ubuntu-focal
apt-cache madison docker-ce # 列出版本
sudo apt-get install docker-ce=<VERSION_STRING> docker-ce-cli=<VERSION_STRING> containerd.io
6. 验证
docker info
4、安装kubeadm
官方地址:https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/
1. 验证每个节点的 MAC 地址和 product_uuid 是唯一的
- 您可以使用以下命令获取网络接口的 MAC 地址
ip link
或ifconfig -a
- product_uuid 可以通过命令查看
sudo cat /sys/class/dmi/id/product_uuid
2. 让 iptables 看到桥接流量
确保br_netfilter
模块已加载。这可以通过运行来完成lsmod | grep br_netfilter
。
要显式加载它,请调用sudo modprobe br_netfilter
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
br_netfilter
EOF
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sudo sysctl --system
3. 安装 kubeadm、kubelet 和 kubectl
#-------|1、更新apt包索引并安装使用 Kubernetesapt存储库所需的包:
sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl
#-------|2、下载 Google Cloud 公共签名密钥:
curl -s https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo apt-key add -
#-------|3、添加 Kubernetesapt存储库:
sudo tee /etc/apt/sources.list.d/kubernetes.list <<EOF
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOF
#-------|4、更新apt包索引,安装 kubelet、kubeadm 和 kubectl,并固定它们的版本:
sudo apt-get update
# 列出版本号
apt-cache madison kubeadm
apt-cache madison kubelet
apt-cache madison kubectl
# 安装最新版本
# sudo apt-get install -y kubelet kubeadm kubectl
# 安装指定版本
sudo apt-get install -y kubelet=1.21.5-00 kubeadm=1.21.5-00 kubectl=1.21.5-00
# 标记指定软件包为保留(held back),阻止软件自动更
sudo apt-mark hold kubelet kubeadm kubectl
# 查看版本
kubeadm version
5、初始化master(master节点操作)
kubeadm init \
--apiserver-advertise-address=192.168.6.31 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.21.5 \
--service-cidr=10.95.0.0/12 \
--pod-network-cidr=10.224.0.0/16 \
--ignore-preflight-errors=all
--apiserver-advertise-address
: 集群通讯地址--image-repository
:由于默认拉取镜像是k8s.gcr.io国内无法访问,这里指定阿里云镜像仓库地址--kubernetes-version
:k8s版本,与上面安装的一致--service-cidr
:集群内部虚拟网络,pod统一访问--pod-network-cidr
:pod网络,与下面部署的CNI网络组件yaml中保持一致--ignore-preflight-errors
:用户可以使用该选项跳过特定的预检查或全部检查。
初始化完成如下:
[bootstrap-token] Creating the "cluster-info" ConfigMap in the "kube-public" namespace
[kubelet-finalize] Updating "/etc/kubernetes/kubelet.conf" to point to a rotatable kubelet client certificate and key
[addons] Applied essential addon: CoreDNS
[addons] Applied essential addon: kube-proxy
Your Kubernetes control-plane has initialized successfully!
To start using your cluster, you need to run the following as a regular user:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
Alternatively, if you are the root user, you can run:
export KUBECONFIG=/etc/kubernetes/admin.conf
You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
https://kubernetes.io/docs/concepts/cluster-administration/addons/
Then you can join any number of worker nodes by running the following on each as root:
kubeadm join 192.168.6.31:6443 --token 6z7nsj.etu233xhbyakugpq \
--discovery-token-ca-cert-hash sha256:e4daac303ffc5b949145bbcbbb5ef0a414e08f18477cccf3a8d287628016ed85
初始化完成后,记住最后输出的kebeadm join
命令,其他节点加入时需要使用,根据初始化提示信息拷贝kebectl使用的连接k8s认证文件到默认路径
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
查看工作节点
root@k8s-master-1:~# kubectl get node
NAME STATUS ROLES AGE VERSION
k8s-master-1 NotReady control-plane,master 3m46s v1.21.5
- 注:由于还没有部署网络插件,所以节点会显示为准备
NotReady
状态 - 参考资料:
https://kubernetes.io/zh/docs/reference/setup-tools/kubeadm/kubeadm-init/#config-file
https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/create-cluster-kubeadm/#initializing-your-control-plane-node
6、加入node节点
到node节点执行初始化的join命令
- 注:默认token有效期是24小时,当过期之后,该token将不可用;这时需要创建新的token:
kubeadm token create --print-join-command
7、部署网络插件
Calico是一个纯三层的数据中心网络方案,是目前Kubernetes主流的网络方案。
下载Calico的YUM文件:
wget https://docs.projectcalico.org/manifests/calico.yaml
下载完成后还需要修改里面定义内容:
- pod网络(CALICO_IPV4POOL_CIDR),与前面
kubeadm init
中--pod-network-cidr
指定一样 - 关闭ipip模式和修改typha_service_name 和修改replicas
calico网络,默认是ipip模式(在每台node主机创建一个tunl0网口,这个隧道链接所有的node容器网络,官网推荐不同的ip网段适合,比如aws的不同区域主机)
修改成BGP模式,它会以daemonset方式安装在所有node主机,每台主机启动一个bird(BGPclient),它会将calico网络内的所有node分配的ip段告知集群内的主机,并通过本机的网卡eth0或者ens33转发数据
- 注:下面这里我们暂时只修改最后一步,pod网络(CALICO_IPV4POOL_CIDR)
# 关闭ipip模式
- name: CALICO_IPV4POOL_IPIP
value: "off"
# 修改typha_service_name
typha_service_name: "calico-typha"
# 修改
replicas: 1
revisionHistoryLimit: 2
# 修改pod的网段CALICO_IPV4POOL_CIDR
- name: CALICO_IPV4POOL_CIDR
value: "10.224.0.0/16"
问题处理:Error querying BIRD: unable to connect to BIRDv4 socket
Warning Unhealthy 19s kubelet Readiness probe failed: calico/node is not ready: BIRD is not ready: Error querying BIRD: unable to connect to BIRDv4 socket: dial unix /var/run/calico/bird.ctl: connect: connection refused
Warning Unhealthy 14s kubelet Readiness probe failed: 2021-12-24 08:56:37.477 [INFO][197] confd/health.go 180: Number of node(s) with BGP peering established = 0
calico/node is not ready: BIRD is not ready: BGP not established with 192.168.6.31
Warning Unhealthy 4s kubelet Readiness probe failed: 2021-12-24 08:56:47.414 [INFO][239] confd/health.go 180: Number of node(s) with BGP peering established = 0
添加相关网卡参数(calico运行要求node之间能够通过一些特定的端口和协议连通)
- env:
- name: IP_AUTODETECTION_METHOD
value: interface=ens32 # 填写自己实际对应的网卡名称
修改完成之后部署:
kubectl apply -f calico.yaml
kubectl get pods -n kube-system
root@k8s-master-1:~# kubectl get nodes
NAME STATUS ROLES AGE VERSION
k8s-master-1 Ready control-plane,master 16m v1.21.5
k8s-node-1 Ready <none> 11m v1.21.5
展示集群详细信息:
kubectl cluster-info
指定kubeconfig:
kubectl --kubeconfig <PATH> get pods
3、部署Dashboard
Dashboard是官方提供的一个UI,可用于基本管理K8s资源。
wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.3/aio/deploy/recommended.yaml
默认Dashboard只能集群内部访问,修改Service为NodePort类型,暴露到外部:
vi recommended.yaml
...
kind: Service
apiVersion: v1
metadata:
labels:
k8s-app: kubernetes-dashboard
name: kubernetes-dashboard
namespace: kubernetes-dashboard
spec:
ports:
- port: 443
targetPort: 8443
nodePort: 30001
selector:
k8s-app: kubernetes-dashboard
type: NodePort
...
kubectl apply -f recommended.yaml
kubectl get pods -n kubernetes-dashboard
- 访问地址:https://NodeIP:30001
创建service account 并绑定到默认的cluster-admin管理员集群角色:
# 创建用户
$ kubectl create serviceaccount dashboard-admin -n kube-system
# 用户授权
$ kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin
# 获取用户Token
$ kubectl describe secrets -n kube-system $(kubectl -n kube-system get secret | awk '/dashboard-admin/{print $1}')
- 注:使用输出的token登陆Dashboard
4、k8s资源监控和信息查询
1、查看集群以及资源信息
# 查看master组件
kubectl get cs
# 查看node状态
kubectl get nodes [-o wide]
# 查看apiserver代理的URL
kubectl cluster-info
# 查看集群详细信息
kubectl cluser-info dump
# 查看资源信息
kubectl describe <资源> <名称>
# 查看资源信息
kubectl get <资源>
问题(bug)处理:
备份目录/etc/kubernetes/manifests
对相应yaml文件进行port修改生效systemctl restart kubelet
2、集群资源利用率
# 查看Node资源利用率
kubectl top <node name>
# 查看Pod资源利用率
kubectl top <top name> [-n namespace]
- 执行时报错: error: Metrics API not available
这是因为该命令需要metric-server服务提供数据,而这个服务默认没有安装,需要手动部署!
1. 部署metric-server
项目地址:https://github.com/kubernetes-sigs/metrics-server
Metrics Server是一个集群范围的资源使用情况的数据聚合器。作为一 个应用部署在集群中。Metric server从每个节点上Kubelet API收集指标,通过Kubernetes聚合器注册在Master APIServer中。 为集群提供Node、Pods资源利用率指标
修改YAML清单:
--kubelet-insecure-tls
忽略tls同行--kubelet-preferred-address-types=InternalIP
使用节点IP连接kubelet- 替换
metrics-server
镜像为geray/metrics-server:v0.4.1
(国外的可能拉取不到)
小技巧:https://kubernetes.io/zh/docs/tutorials/hello-minikube/
验证部署:
kubectl create -f components.yaml
# 如果状态True并能返回数据说明Metrics Server服务工作正常
kubectl get apiservices |grep metrics
kubectl get --raw /apis/metrics.k8s.io/v1beta1/nodes
2. top命令解读
kubectl top nodes --use-protocol-buffers
- –use-protocol-buffers 切换到协议缓冲区
- CPU(cores) 单位(毫核)
一核心会分成1000个毫核心,一个毫核心为1m,如下cpu(cores)中324m就表示324个毫核心。
核心计算百分比方式,需要先知道自己有多少颗cpu,命令:lscpu,一颗cpu是1000毫核心,得出总毫核心以后就可以计算了,如上master使用了235m,则master的使用率为(假设我的核心数为4):235/(4000)*100=5.857%
问题来了,你觉得nodes中已经有CPU的%了,还自己算个der?
是的,node使用率已经有了,但pod没有,所有pod都需要自己计算的,要知道m这个东西是啥才是最重要的。
3. 错误日志定位
# systemd守护进程管理的组件
journalctl -u <组件名称>
# 资源信息
kubectl describe <资源名称> [namespace]
# 系统日志
tail -20f /var/log/messages # centos
tail -20f /var/log/auth.log # ubuntu
一些最为重要的 Linux 系统日志包括:
/var/log/syslog 或 /var/log/messages 存储所有的全局系统活动数据,包括开机信息。基于 Debian 的系统如 Ubuntu 在 /var/log/syslog 中存储它们,而基于 RedHat 的系统如 RHEL 或 CentOS 则在 /var/log/messages 中存储它们。
/var/log/auth.log 或 /var/log/secure 存储来自可插拔认证模块(PAM)的日志,包括成功的登录,失败的登录尝试和认证方式。Ubuntu 和 Debian 在 /var/log/auth.log 中存储认证信息,而 RedHat 和 CentOS 则在 /var/log/secure 中存储该信息。
4. k8s应用日志
# 调度信息
kubectl describe <资源名称> [namespace]
# 应用日志
kubectl logs <Pod名称>
kubectl logs -f <Pod名称>
kubectl logs -f <Pod名称> -c <容器名称>
标准输出在宿主机的路径:/var/lib/docker/containers/<container-id>/<container-id>-json.log
宿主机的路径:
- 容器中应用日志可以使用emptyDir数据卷将日志文件持久化到宿主机上。
/var/lib/kubelet/pods/<pod-id>/volumes/kubernetes.io~empty-dir/logs/access.log
5、k8s日志收集
针对标准输出:
以DaemonSet方式在每个Node 上部署一个日志收集程序,采集 /var/lib/docker/containers/
目录下所有容器日志
针对容器中日志文件:
在Pod中增加一个容器运行 日志采集器,使用emtyDir
共享日志目录让日志采 集器读取到日志文件
5、k8s资源清单
1、k8s中资源分类
K8s 中所有的内容都抽象为资源, 资源实例化之后,叫做对象
资源分类:
分类名称 | 资源名 |
---|---|
工作负载型( workload ) | Pod、ReplicaSet、Deployment、StatefulSet、DaemonSet、Job、 CronJob ( ReplicationController 在 v1.11 版本被废弃 ) |
服务发现及负载均衡型 | Service、Ingress、… |
配置与存储型资源 | Volume( 存储卷 )、CSI( 容器存储接口,可以扩展各种各样的第三方存储卷 ) |
特殊类型的存储卷 | ConfigMap( 当配置中心来使用的资源类型 )、Secret(保存敏感数据)、 DownwardAPI(把外部环境中的信息输出给容器) |
集群级资源 | Namespace、Node、Role、ClusterRole、RoleBinding、ClusterRoleBinding |
元数据型资源 | HPA、PodTemplate、LimitRange |
2、资源清单(服务编排YAML)
在 k8s 中,一般使用 yaml 格式的文件来创建符合我们预期期望的 pod ,这样的 yaml 文件我们一般 称为资源清单;因此在学习之前,应先了解YAML语法格式:
-
缩进表示层级关系
-
不支持制表符“tab”缩进,使用空格缩进
-
习惯以2个空格为一个层级
-
字符后缩进 1 个空格,如冒号、逗号等
-
“—” 表示YAML格式,一个文件的开始
-
“#”注释
-
- <name>
类似“数组列表类型”,可以存在多个
1. k8s中常用字段的解释
查看资源的字段kubectl api-resources
一个k8s资源清单主要包含5个部分内容:
- version:k8s API版本
- kind:资源类型和角色
- metadata:元数据信息
- spec:对象详细信息
- 资源状态
**version:**k8s API版本
参数名 | 字段类型 | 说明 |
---|---|---|
version | string | 指定k8s API版本,kubectl api-versions 命令查看 |
**kind:**资源类型和角色
参数名 | 字段类型 | 说明 |
---|---|---|
kind | string | 指资源类型和角色,如:Pod,Secret |
**metadata:**元数据信息
参数名 | 字段类型 | 说明 |
---|---|---|
metadata | Object | 元数据对象 |
metadata.name | string | 元数据对象名字,比如Pod的名称 |
metadata.namespacemetadata | stringObject | 元数据对象的名称空间元数据对象 |
**spec:**对象详细信息
参数名 | 字段类型 | 说明 |
---|---|---|
spec | Object | 详细定义对象 |
spec.containers[] | list | 容器列表 |
spec.containers[].name | string | 容器名称 |
spec.containers[].image | string | 镜像 |
spec.containers[].imagePullPolicy | string | 镜像拉取策略(Always,Never,IfNotPresent);【Always:每次都重新拉取;Never:仅适用本地;IfNotPresent:本地没有就拉取在线镜像】 |
spec.containers[].command[] | list | 指定容器运行命令,不指定则使用镜像打包时指定的 |
spec.containers[].args[] | list | 指定容器启动命令参数 |
spec.containers[].workingDir | string | 指定容器的工作目录 |
spec.containers[].volumeMounts[] | list | 指定容器内部的存储卷配置 |
spec.containers[].volumeMounts[].name | string | 挂载存储卷名称 |
spec.containers[].volumeMounts[].mountPath | string | 挂载存储卷路径 |
spec.containers[].volumeMounts[].readOnly | string | 存储卷路径读写模式 |
spec.containers[].ports[] | list | 容器需要使用的端口列表 |
spec.containers[].ports[].mame | string | 容器端口名称 |
spec.containers[].ports[].containerPort | Int | 容器的端口号 |
spec.containers[].ports[].hostPort | Int | 映射到所在主机的端口号,默认和上面容器的相同;【设置了hostPort,同一台主机无法启动相同的副本(端口冲突)】 |
spec.containers[].ports[].protcol | string | 指定端口协议,支持TCP和UDP |
spec.containers[].env[] | List | 容器运行前需要的环境变量列表 |
spec.containers[].env[].name | String | 环境变量名称 |
spec.containers[].env[].volue | String | 环境变量值 |
spec.containers[].resources | Object | 资源限制和资源请求 |
spec.containers[].resources.limits | Object | 容器运行时运行的资源上限 |
spec.containers[].resources.limits.cpu | String | CPU上限,单位为core数(类似的docker run --cpu-shares ) |
spec.containers[].resources.limits.memory | String | MEM内存上限,单位为:Mi,Gi |
spec.containers[].resources.requests | Object | 容器运行时运行的资源下限 |
spec.containers[].resources.requests.cpu | String | CPU请求,单位为core数 |
spec.containers[].resources.requests | String | MEM请求,单位Mi,Gi |
spec.restartPolicy | String | Pod重启策略(Always,OnFailure,Never);【Always:kubelet始终会重启;OnFailure:非0退出时,kubelet会重启;Never:kubelet将退出码报告给master,不会重启】 |
spec.nodeSelector | Object | 定义node的Label过滤标签,key: value 格式 |
spec.imagePullSecrets | Object | 定义pull镜像时使用的secret,name: secretkey 格式指定 |
spec.hostNetwork | Boolean | 是否使用主机网络模式,true使用宿主机网络,不是有docker网桥,启用则无法在同一台宿主机上启动第二个副本 |
6、k8s命令行工具kubectl
1、kubectl工具概述
kubectl 是 Kubernetes 集群的命令行工具,通过 kubectl 能够对集群本身进行管理,并能 够在集群上进行容器化应用的安装部署。
格式:
kubectl [command] [TYPE] [name] [flags]
- comand:指定要对资源执行的操作,例如 create、get、describe 和 delete
- TYPE:指定资源类型,资源类型是大小写敏感的
- NAME:指定资源的名称,名称也大小写敏感的。如果省略名称,显示所有的资源
- flags:指定可选的参数。例如,可用-s 或者–server 参数指定 Kubernetes API server 的地址和端口。
使用kubectl --help
获取更多帮助信息
kubectl get pod nginx --namespace defualt
告给master,不会重启】 |
| spec.nodeSelector | Object | 定义node的Label过滤标签,key: value
格式 |
| spec.imagePullSecrets | Object | 定义pull镜像时使用的secret,name: secretkey
格式指定 |
| spec.hostNetwork | Boolean | 是否使用主机网络模式,true使用宿主机网络,不是有docker网桥,启用则无法在同一台宿主机上启动第二个副本 |
6、k8s命令行工具kubectl
1、kubectl工具概述
kubectl 是 Kubernetes 集群的命令行工具,通过 kubectl 能够对集群本身进行管理,并能 够在集群上进行容器化应用的安装部署。
格式:
kubectl [command] [TYPE] [name] [flags]
- comand:指定要对资源执行的操作,例如 create、get、describe 和 delete
- TYPE:指定资源类型,资源类型是大小写敏感的
- NAME:指定资源的名称,名称也大小写敏感的。如果省略名称,显示所有的资源
- flags:指定可选的参数。例如,可用-s 或者–server 参数指定 Kubernetes API server 的地址和端口。
使用kubectl --help
获取更多帮助信息
kubectl get pod nginx --namespace defualt