1-k8s概述及部署

16 篇文章 0 订阅
6 篇文章 0 订阅

1、k8s介绍

1、k8s概述

Kubernetes (简称k8s)是一个轻便的和可扩展的开源平台,用于管理容器化应用和服务。通过 Kubernetes 能够进行应用的自动化部署和扩缩容。2014年被Google开放,并在CNCF成功毕业!

2、k8s核心功能

在这里插入图片描述

开发者通过声明式API方式,提交一个应用列表到kubernetes主节点,kubernetes会将他们部署到集群的工作节点中。组件被部署到那个节点上对于开发者和系统管理员都不用关心。

  1. 自动装箱

    基于容器对应用运行环境的资源配置要求自动部署应用容器

  2. 自我修复

    当容器失败时,会对容器进行重启

    当所部署的 Node 节点有问题时,会对容器进行重新部署和重新调度

    当容器未通过监控检查时,会关闭此容器直到容器正常运行时,才会对外提供服务

  3. 扩缩容

    命令、用户UI 或基于 CPU 等资源使用情况,对应用容器进行伸缩

  4. 服务发现

    用户不需使用额外的服务发现机制,就能够基于 Kubernetes 自身能力实现服务发现和 负载均衡

  5. 滚动更新

  6. 版本回退

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 initkubeadm 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(可预测的网络接口名称)”标识网络接口。

  1. 识别要配置的以太网接口的名称
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
  1. 分配静态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)
  1. 保存文件并应用更改
sudo netplan apply
  1. 验证更改
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. 初始化系统

更换Ubuntu的apt源

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 linkifconfig -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个部分内容:

  1. version:k8s API版本
  2. kind:资源类型和角色
  3. metadata:元数据信息
  4. spec:对象详细信息
  5. 资源状态

**version:**k8s API版本

参数名字段类型说明
versionstring指定k8s API版本,kubectl api-versions命令查看

**kind:**资源类型和角色

参数名字段类型说明
kindstring指资源类型和角色,如:Pod,Secret

**metadata:**元数据信息

参数名字段类型说明
metadataObject元数据对象
metadata.namestring元数据对象名字,比如Pod的名称
metadata.namespacemetadatastringObject元数据对象的名称空间元数据对象

**spec:**对象详细信息

参数名字段类型说明
specObject详细定义对象
spec.containers[]list容器列表
spec.containers[].namestring容器名称
spec.containers[].imagestring镜像
spec.containers[].imagePullPolicystring镜像拉取策略(Always,Never,IfNotPresent);【Always:每次都重新拉取;Never:仅适用本地;IfNotPresent:本地没有就拉取在线镜像】
spec.containers[].command[]list指定容器运行命令,不指定则使用镜像打包时指定的
spec.containers[].args[]list指定容器启动命令参数
spec.containers[].workingDirstring指定容器的工作目录
spec.containers[].volumeMounts[]list指定容器内部的存储卷配置
spec.containers[].volumeMounts[].namestring挂载存储卷名称
spec.containers[].volumeMounts[].mountPathstring挂载存储卷路径
spec.containers[].volumeMounts[].readOnlystring存储卷路径读写模式
spec.containers[].ports[]list容器需要使用的端口列表
spec.containers[].ports[].mamestring容器端口名称
spec.containers[].ports[].containerPortInt容器的端口号
spec.containers[].ports[].hostPortInt映射到所在主机的端口号,默认和上面容器的相同;【设置了hostPort,同一台主机无法启动相同的副本(端口冲突)】
spec.containers[].ports[].protcolstring指定端口协议,支持TCP和UDP
spec.containers[].env[]List容器运行前需要的环境变量列表
spec.containers[].env[].nameString环境变量名称
spec.containers[].env[].volueString环境变量值
spec.containers[].resourcesObject资源限制和资源请求
spec.containers[].resources.limitsObject容器运行时运行的资源上限
spec.containers[].resources.limits.cpuStringCPU上限,单位为core数(类似的docker run --cpu-shares
spec.containers[].resources.limits.memoryStringMEM内存上限,单位为:Mi,Gi
spec.containers[].resources.requestsObject容器运行时运行的资源下限
spec.containers[].resources.requests.cpuStringCPU请求,单位为core数
spec.containers[].resources.requestsStringMEM请求,单位Mi,Gi
spec.restartPolicyStringPod重启策略(Always,OnFailure,Never);【Always:kubelet始终会重启;OnFailure:非0退出时,kubelet会重启;Never:kubelet将退出码报告给master,不会重启】
spec.nodeSelectorObject定义node的Label过滤标签,key: value格式
spec.imagePullSecretsObject定义pull镜像时使用的secret,name: secretkey格式指定
spec.hostNetworkBoolean是否使用主机网络模式,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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值