Kubernetes 安装手册

简介

Kubernetes是一个开源的容器编排工具,具有如下功能和特点: * 自动部署 * 弹性伸缩 * 容器生命周期管理 * 基于多种基础设施(本地部署,公有云,混合云等)

安装

kubeoperator部署

kube-apiserver

--authorization-mode

--admission-control

 AlwaysAdmit
 AlwaysDeny
 AlwaysPullImages
 DefaultStorageClass
 DefaultTolerationSeconds 
 DenyEscalatingExec 
 DenyExecOnPrivileged 
 EventRateLimit 
 ExtendedResourceToleration 
 ImagePolicyWebhook 
 LimitPodHardAntiAffinityTopology 
 LimitRanger 
 MutatingAdmissionWebhook 
 NamespaceAutoProvision 
 NamespaceExists 
 NamespaceLifecycle 
 NodeRestriction 
 OwnerReferencesPermissionEnforcement 
 PersistentVolumeClaimResize 
 PersistentVolumeLabel 
 PodNodeSelector 
 PodPreset 
 PodSecurityPolicy 
 PodTolerationRestriction 
 Priority 
 ResourceQuota 
 RuntimeClass 
 SecurityContextDeny 
 ServiceAccount 
 StorageObjectInUseProtection 
 TaintNodesByCondition 
 ValidatingAdmissionWebhook
  NamespaceLifecycle 
  LimitRanger 
  ServiceAccount 
  TaintNodesByCondition 
  Priority 
  DefaultTolerationSeconds 
  DefaultStorageClass 
  StorageObjectInUseProtection 
  PersistentVolumeClaimResize 
  MutatingAdmissionWebhook 
  ValidatingAdmissionWebhook 
  RuntimeClass 
  ResourceQuota
 * 该插件拒绝在终止状态的namespace(即用户发起删除一个namespace的请求后,此时该namespace的.status.phase为Terminating状态,待该namespace下的所有资源全部被删除后,它才会退出)中创建新资源的请求,以及在尚未存在的namespace下创建资源的请求。

 * NamespaceLifecycle的Admit函数非常直观地展示了该admission controller的策略,它接受CREATE、UPDATE和DELETE操作。在每次接收到API请求之后,执行如下检查:

    当接收到的API请求试图删除namespace时,如果该namespace为default,拒绝该请求,否则接收该请求,并且从本地cache中将该namespace的记录删除。
    当接收到的API请求为资源相关的请求时,查找其对应的namespace,如果该namespace不存在,拒绝该请求。
    当接收到的API请求为创建资源请求时,如果该namespace为Terminating状态,拒绝该请求。
    当上述情况均未违反相应规则时,则通过该请求
 * LimitRanger插件的作用是判断客户端API请求中的资源需求是否符合系统管理员预设值,包括上限、下限、默认值以及默认比率。为了配合LimitRanger插件的使用,Kubernetes引人了LimitRange对象,用于对特定namespace中的Kubernetes对象设置资源使用的预设值。当前Kubernetes支持以namespace为单位,在pod和容器两个层次对资源使用进行管理

 * 首先,向admission control注册一个名为LimitRanger的插件。
 * 然后,实现Admit方法。该方法首先获取发起API请求所在的namespace中的LimitRange对象列表。遍历该LimitRange对象列表,执行如下检查:

    对于.spec.container.resources.limits和.spec.container.resources.requests字段为空的manifest,填入LimitRange设定的默认值。
    对于pod中的每个container,检查其.container.resources.limits和.container.resources.requests是否满足LimitRange的.spec.limits.max, .spec.limits.min和.spec.limits.maxLimitRequestRatio的设定。如果不满足,则拒绝该请求。

 * LimitRanger插件只适用于Kubernetes对象创建(CREATE)和更新(UPDATE)操作,并不受理删除操作。需要注意的是,一个namespace中可能存在不止一个LimitRange对象,因此,任何一个针对Kubernetes对象的创建和更新操作都要接受该namespace中所有LimitRange对象的限制

 * service account为pod中的进程提供id。实际上,当用户试图与APIServer打交道时,往往通过user account来进行身份的认证及授权;类似地,集群中的pod也可能希望与APIServer通信,系统并不为其创建user account,而作为代替的就是service account。

​ * 如果用户启用了service account自动生成的功能,controller就会接管这项工作,主要涉及了3个层面,分别对应service account admission controller, token controller和service account controllero这里我们主要关注第一个。

 * service account插件在pod创建(CREATE)时发挥作用,其Admit函数包括如下检查:

    如果创建的pod是mirror pod,且其.spec.serviceAccountName或volumes.VolumeSource.secret不为空,则拒绝该请求。
    如果创建的pod的.spec.serviceAccountName为空,则将该字段设为同一namespace下的default service account。
    检查pod引用的service account是存在的,如不存在拒绝该请求。
    查找service account对应的secret token,如该pod中未存在该volume,则为其挂载

​ * ResourceQuota插件的作用是为特定namespace应用资源使用的配额。与LimitRanger插件类似,为了配合ResourceQuota插件的使用,Kubernetes引人了ResourceQuota对象,用于对特定namespace中的Kubernetes对象设置资源配额

暴露给集群中其它成员的IP地址,这个地址必须是可以访问的,如果不填写或者为空,则使用--bind-address,如果--bind-address为空,则使用节点默认的网络接口。

bind-address

默认为:0.0.0.0, --secure-port port监听需要使用的IP地址

log-dir

log-file

log-file-max-size

log-flush-frequency

logtostderr

master-service-namespace

max-mutating-requests-inflight

max-requests-inflight

secure-port

storage-backend

storage-media-type

v

kube-controller 参数

allocate-node-cidrs

alsologtostderr

bind-address

cluster-cidr

cluster-name

concurrent-deployment-syncs

kubeconfig

large-cluster-size-threshold

leader-elect

log-dir

log-file

log-file-max-size

log-flush-frequency

master

node-cidr-mask-size

node-eviction-rate

node-monitor-grace-period

service-cluster-ip-range

controllers

  attachdetach 
  bootstrapsigner 
  cloud-node-lifecycle 
  clusterrole-aggregation 
  cronjob 
  csrapproving 
  csrcleaner 
  csrsigning 
  daemonset 
  deployment 
  disruption 
  endpoint 
  endpointslice 
  garbagecollector 
  horizontalpodautoscaling 
  job 
  namespace 
  nodeipam 
  nodelifecycle 
  persistentvolume-binder 
  persistentvolume-expander 
  podgc 
  pv-protection 
  pvc-protection 
  replicaset 
  replicationcontroller 
  resourcequota 
  root-ca-cert-publisher 
  route 
  service 
  serviceaccount 
  serviceaccount-token 
  statefulset 
  tokencleaner 
  ttl 
  ttl-after-finished
  Disabled-by-default controllers: bootstrapsigner 
  endpointslice 
  tokencleaner

kube-scheduler 参数

address

bind-address

leader-elect

secure-port

config

kubelet参数

--register-node

    --kubeconfig - Path to credentials to authenticate itself to the apiserver.
    --cloud-provider - How to talk to a cloud provider to read metadata about itself.
    --register-node - Automatically register with the API server.
    --register-with-taints - Register the node with the given list of taints (comma separated <key>=<value>:<effect>). No-op if register-node is false.
    --node-ip - IP address of the node.
    --node-labels - Labels to add when registering the node in the cluster (see label restrictions enforced by the NodeRestriction admission plugin in 1.13+).
    --node-status-update-frequency - Specifies how often kubelet posts node status to master.

--kubeconfig

--node-ip

--node-labels

--system-reserved=[cpu=100m][,][memory=100Mi][,][ephemeral-storage=1Gi][,][pid=1000]

--kubelet-certificate-authority

--cloud-provider

--port

kube-proxy参数

结语