1-k8s概述及部署

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

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.yaml50-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 pasteubuntu下的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、初始化mastermaster节点操作

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的使用率为假设我的核心数为4235/(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. versionk8s API版本
  2. kind资源类型和角色
  3. metadata元数据信息
  4. spec对象详细信息
  5. 资源状态

**version**k8s API版本

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

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

参数名字段类型说明
kindstring指资源类型和角色如PodSecret

**metadata**元数据信息

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

**spec**对象详细信息

参数名字段类型说明
specObject详细定义对象
spec.containers[]list容器列表
spec.containers[].namestring容器名称
spec.containers[].imagestring镜像
spec.containers[].imagePullPolicystring镜像拉取策略AlwaysNeverIfNotPresent【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内存上限单位为MiGi
spec.containers[].resources.requestsObject容器运行时运行的资源下限
spec.containers[].resources.requests.cpuStringCPU请求单位为core数
spec.containers[].resources.requestsStringMEM请求单位MiGi
spec.restartPolicyStringPod重启策略AlwaysOnFailureNever【Alwayskubelet始终会重启OnFailure非0退出时kubelet会重启Neverkubelet将退出码报告给master不会重启】
spec.nodeSelectorObject定义node的Label过滤标签key: value格式
spec.imagePullSecretsObject定义pull镜像时使用的secretname: 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镜像时使用的secretname: 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
阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: k8s