Ⅰ.K8s安装步骤

1.安装docker、配置环境、上传镜像文件

四个文件夹。package、conf、service、pem,里面写好内容传上去。

节点 package conf service pem
master docker、网桥、etcd、k8s、2个镜像、calico组件、cfssl etcd、apiservice、kubectl、proxy、conf etcd、apiservie、controller-manager、schedule、kubectl、proxy、calico
node1 docker、网桥、etcd、k8s、2个镜像、calico组件 kubectl、proxy、calico
node2 docker、网桥、etcd、k8s、2个镜像、calico组件 kubectl、proxy、calico

KUBE_SERVICE_ADDRESSES="--service-cluster-ip-range=169.169.0.0/16"

2.安装etcd,复制二进制文件,写service、etcd,开启服务

3.安装apiservice、controller-manager、schedule。除了apiservice都是直接开启service

4.安装kubelet,通过service、conf、类yaml开启服务

docker save ist0ne/pause-amd64:latest -o /k8s/pause.tar
docker load -i pause.tar

docker save tomcat:latest -o /k8s/tomcat.tar

zip -r https-master.zip /test/kubernetes-starter/targe

Ⅱ.各个service文件简单介绍

最好得了解一下各个参数,因为有的参数不设置则K8s会使用默认值进行设置,而默认值可能会引发错误。

etcd.service

apiserver.service

apiserver为api对象验证并配置数据,其他组件都是通过apiserver与master节点进行交互。
主要kube-apiserver参数,全部参数见链接,这里只列出主要的参数:

apiserver主要参数
--admission-control stringSlice                           
控制资源进入集群的准入控制插件的顺序列表。逗号分隔的NamespaceLifecycle列表。(默认值[AlwaysAdmit])

--advertise-address ip                                    
向集群成员通知apiserver消息的IP地址。这个地址必须能够被集群中其他成员访问。如果IP地址为空,将会使用--bind-address,如果未指定--bind-address,将会使用主机的默认接口地址。

--allow-privileged                                        
如果为true, 将允许特权容器.

--anonymous-auth                                          
启用到API server的安全端口的匿名请求。未被其他认证方法拒绝的请求被当做匿名请求。匿名请求的用户名为system:anonymous,用户组名为system:unauthenticated。(默认值true)

--audit-policy-file string                                
定义审计策略配置的文件的路径。需要打开'AdvancedAuditing'特性开关。AdvancedAuditing需要一个配置来启用审计功能。

--authorization-mode string                               
在安全端口上进行权限验证的插件的顺序列表。以逗号分隔的列表,包括:AlwaysAllow,AlwaysDeny,ABAC,Webhook,RBAC,Node.(默认值"AlwaysAllow")

--basic-auth-file string                                  
如果设置该值,这个文件将会被用于准许通过http基本认证到API server安全端口的请求。

--bind-address ip                                         
监听--seure-port的IP地址。被关联的接口必须能够被集群其它节点和CLI/web客户端访问。如果为空,则将使用所有接口(0.0.0.0)。(默认值0.0.0.0)

--cert-dir string                                         
存放TLS证书的目录。如果提供了--tls-cert-file和--tls-private-key-file选项,该标志将被忽略。(默认值 "/var/run/kubernetes")

--client-ca-file string                                   
如果设置此标志,对于任何请求,如果存包含client-ca-file中的authorities签名的客户端证书,将会使用客户端证书中的CommonName对应的身份进行认证。

--enable-aggregator-routing                               
打开到endpoints IP的aggregator路由请求,替换cluster IP。

--enable-swagger-ui                                       
在apiserver的/swagger-ui路径启用swagger ui。

--etcd-cafile string                                      
用于保护etcd通信的SSL CA文件。

--etcd-certfile string                                    
用于保护etcd通信的的SSL证书文件。

--etcd-keyfile string                                     
用于保护etcd通信的SSL密钥文件.

--etcd-servers stringSlice                                
连接的etcd服务器列表,形式为(scheme://ip:port),使用逗号分隔。

--etcd-servers-overrides stringSlice                      
针对单个资源的etcd服务器覆盖配置, 以逗号分隔。 单个配置覆盖格式为: group/resource#servers, 其中servers形式为http://ip:port, 以分号分隔。

--enable-bootstrap-token-auth                             
启用此选项以允许'kube-system'命名空间中的'bootstrap.kubernetes.io/token'类型密钥可以被用于TLS的启动认证。

--experimental-encryption-provider-config string          
包含加密提供程序的配置的文件,该加密提供程序被用于在etcd中保存密钥。

--external-hostname string                                
为此master生成外部URL时使用的主机名(例如Swagger API文档)。

--insecure-allow-any-token username/group1,group2         
如果设置该值, 你的服务将处于非安全状态。任何令牌都将会被允许,并将从令牌中把用户信息解析成为username/group1,group2。

--insecure-bind-address ip                                
用于监听--insecure-port的IP地址 (设置成0.0.0.0表示监听所有接口)。(默认值127.0.0.1)

--insecure-port int                                       
用于监听不安全和为认证访问的端口。这个配置假设你已经设置了防火墙规则,使得这个端口不能从集群外访问。对集群的公共地址的443端口的访问将被代理到这个端口。默认设置中使用nginx实现。(默认值8080)

--kubelet-certificate-authority string                    
证书authority的文件路径。

--kubelet-client-certificate string                       
用于TLS的客户端证书文件路径。

--kubelet-client-key string                               
用于TLS的客户端证书密钥文件路径.

--kubelet-https                                           
为kubelet启用https。 (默认值true)

--kubelet-preferred-address-types stringSlice             
用于kubelet连接的首选NodeAddressTypes列表。 (默认值[Hostname,InternalDNS,InternalIP,ExternalDNS,ExternalIP])

--kubelet-read-only-port uint                             
已废弃: kubelet端口. (默认值10255)

--kubelet-timeout duration                                
kubelet操作超时时间。(默认值 5s)

--secure-port int                                         
用于监听具有认证授权功能的HTTPS协议的端口。如果为0,则不会监听HTTPS协议。 (默认值6443)

--service-cluster-ip-range ipNet                          
CIDR表示的IP范围,服务的cluster ip将从中分配。 一定不要和分配给nodes和pods的IP范围产生重叠。

--target-ram-mb int                                       
apiserver内存限制,单位为MB(用于配置缓存大小等)。

--tls-ca-file string                                      
如果设置该值,这个证书authority将会被用于从Admission Controllers过来的安全访问。它必须是一个PEM加密的合法CA捆绑包。此外, 该证书authority可以被添加到以--tls-cert-file提供的证书文件中.

--tls-cert-file string                                    
包含用于HTTPS的默认x509证书的文件。(如果有CA证书,则附加于server证书之后)。如果启用了HTTPS服务,并且没有提供--tls-cert-file和--tls-private-key-file,则将为公共地址生成一个自签名的证书和密钥并保存于/var/run/kubernetes目录。

--tls-private-key-file string                             
包含匹配--tls-cert-file的x509证书私钥的文件。

--tls-sni-cert-key namedCertKey                          
一对x509证书和私钥的文件路径, 可以使用符合正式域名的域形式作为后缀。 如果没有提供域形式后缀, 则将提取证书名。 非通配符版本优先于通配符版本, 显示的域形式优先于证书中提取的名字。 对于多个密钥/证书对, 请多次使用--tls-sni-cert-key。例如: "example.crt,example.key" or "foo.crt,foo.key:*.foo.com,foo.com". (默认值[])

--token-auth-file string                                  
如果设置该值,这个文件将被用于通过令牌认证来保护API服务的安全端口。

--version version[=true]                                  
打印版本信息并退出。

--watch-cache                                             
启用apiserver的监视缓存。(默认值true)

--watch-cache-sizes stringSlice                           
每种资源(pods, nodes等)的监视缓存大小列表,以逗号分隔。每个缓存配置的形式为:resource#size,size是一个数字。在watch-cache启用时生效。

scheduler.service

scheduler主要参数
--address string     默认: "0.0.0.0"

弃用: 要监听 --port 端口的 IP 地址(对于所有 IPv4 接口设置为 0.0.0.0,对于所有 IPv6 接口设置为 ::)。 请参阅 --bind-address。

--algorithm-provider string
弃用: 要使用的调度算法,可选值:ClusterAutoscalerProvider |DefaultProvider

--config string
配置文件的路径。标志会覆盖此文件中的值。

--kube-api-burst int32     默认: 100
弃用: 每秒与 kubernetes apiserver 交互的数量

--kubeconfig string
弃用: 包含授权和 master 位置信息的 kubeconfig 文件的路径。

--master string
Kubernetes API 服务器的地址(覆盖 kubeconfig 中的任何值)

--port int     默认: 10251
弃用: 不安全地提供没有身份验证和授权的 HTTP 端口。 如果为0,则根本不提供 HTTPS。 请参阅 --secure-port。

--profiling
弃用: 通过 web 接口 host:port/debug/pprof/ 启动性能分析

controller-manager.service

controller-manager主要参数

--attach-detach-reconcile-sync-period duration默认值:1m0s 协调程序在卷附加分离之间同步等待时间。此持续时间必须大于一秒,并且从默认值增加此值可能允许卷与pod不匹配。 --authentication-kubeconfig string kubeconfig文件指向'core'kubernetes服务器,具有足够的权限来创建tokenaccessreviews.authentication.k8s.io。这是可选的。如果为空,则所有令牌请求都被视为匿名,并且在群集中不会查找客户端CA. --authorization-kubeconfig string kubeconfig文件指向'core'kubernetes服务器,具有足够的权限来创建subjectaccessreviews.authorization.k8s.io。这是可选的。如果为空,则禁止所有未被授权跳过的请求。 --bind-address ip默认值:0.0.0.0 要监听--secure-port端口的IP地址。关联的接口必须可由群集的其余部分以及CLI / Web客户端访问。如果为空,将使用所有接口(所有IPv4接口均为0.0.0.0,所有IPv6接口为::)。 --cert-dir string TLS证书所在的目录。如果提供了--tls-cert-file和--tls-private-key-file,则将忽略此标志。 --client-ca-file string 如果设置,则表示由client-ca文件中的某个权限签名的客户端证书的任何请求都将使用与客户端证书的CommonName对应的标识进行身份验证。 --cluster-cidr string 集群中Pod的CIDR范围。要求--allocate-node-cidrs为true --cluster-name string默认值:“kubernetes” 集群的实例前缀。 --cluster-signing-cert-file string默认值:“/ etc / kubernetes / ca /​​ ca.pem” 包含PEM编码的X509 CA证书的文件名,用于颁发群集范围的证书 --cluster-signing-key-file string默认值:“/ etc / kubernetes / ca /​​ ca.key” 包含PEM编码的RSA或ECDSA私钥的文件名,用于对集群范围的证书进行签名 --concurrent-deployment-syncs int32默认值:5 允许同时同步的部署对象的数量。更大的数字=响应更快的部署,但CPU负载(和网络)负载更多 --concurrent-endpoint-syncs int32默认值:5 将同时执行的端点同步操作的数量。更大的数字=更快的端点更新,但更多的CPU(和网络)负载 --concurrent-service-syncs int32默认值:1 允许同时同步的服务数。更大的数字=响应更快的服务管理,但更多的CPU(和网络)负载 --concurrent-serviceaccount-token-syncs int32默认值:5 允许同时同步的服务帐户令牌对象的数量。数字越大=响应式令牌生成越多,但CPU负载(和网络)负载越多 --controllers stringSlice默认值:[*] 要启用的控制器列表。'*'启用所有默认控制器,'foo'启用名为'foo'的控制器,' - foo'禁用名为'foo'的控制器。 所有控制器:attachdetach,bootstrapsigner,cloud-node-lifecycle,clusterrole-aggregation,cronjob,csrapproving,csrcleaner,csrsigning,daemonset,deployment,disruption,endpoint,garbagecollector,horizo​​ntalpodautoscaling,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-默认控制器:bootstrapsigner,tokencleaner --kubeconfig string 具有授权和主位置信息的kubeconfig文件的路径。 --master string Kubernetes API服务器的地址(覆盖kubeconfig中的任何值)。 --root-ca-file string 如果设置,则此根证书颁发机构将包含在服务帐户的令牌机密中。这必须是有效的PEM编码的CA捆绑包。 --secure-port int默认值:10257 通过身份验证和授权为HTTPS提供服务的端口。如果为0,则根本不提供HTTPS。 --service-account-private-key-file string 文件名包含用于签署服务帐户令牌的PEM编码的私有RSA或ECDSA密钥。 --service-cluster-ip-range string 集群中服务的CIDR范围。要求--allocate-node-cidrs为true --tls-cert-file string 包含HTTPS的默认x509证书的文件。(CA证书,如果有的话,在服务器证书之后连接)。如果启用了HTTPS服务,并且未提供--tls-cert-file和--tls-private-key-file,则会为公共地址生成自签名证书和密钥,并将其保存到 - 指定的目录中 - CERT-DIR。 --tls-min-version string 支持最低TLS版本。可能的值:VersionTLS10,VersionTLS11,VersionTLS12 --tls-private-key-file string 包含与--tls-cert-file匹配的默认x509私钥的文件。

kubelet.service

kubelet 是在每个节点上运行的主要 “节点代理”。kubelet 以 PodSpec 为单位来运行任务,PodSpec 是一个描述 pod 的 YAML 或 JSON 对象。 kubelet 运行多种机制(主要通过 apiserver)提供的一组 PodSpec,并确保这些 PodSpecs 中描述的容器健康运行。 不是 Kubernetes 创建的容器将不在 kubelet 的管理范围。

除了来自 apiserver 的 PodSpec 之外,还有三种方法可以将容器清单提供给 Kubelet。

文件:通过命令行传入的文件路径。kubelet 将定期监听该路径下的文件以获得更新。监视周期默认为 20 秒,可通过参数进行配置。

HTTP 端点:HTTP 端点以命令行参数传入。每 20 秒检查一次该端点(该时间间隔也是可以通过命令行配置的)。

HTTP 服务:kubelet 还可以监听 HTTP 并响应简单的 API(当前未指定)以提交新的清单。

kubelet主要参数
--address 0.0.0.0
Kubelet的IP地址(所有IPv4接口设置为0.0.0.0,所有IPv6接口设置为`::`)(默认值0.0.0.0)

--anonymous-AUTH
启用对Kubelet服务器的匿名请求。未被其他身份验证方法拒绝的请求将被视为匿名请求。匿名请求的用户名为system:anonymous,组名为system:unauthenticated。(默认为true)

--bootstrap-checkpoint-path字符串
存储检查点的目录的路径

--bootstrap-kubeconfig字符串
kubeconfig文件的路径,用于获取kubelet的客户端证书。如果--kubeconfig指定的文件不存在,则引导程序kubeconfig用于从API服务器请求客户端证书。成功时,引用生成的客户端证书和密钥的kubeconfig文件将写入--kubeconfig指定的路径。客户端证书和密钥文件将存储在--cert-dir指向的目录中。

--cert-dir string
TLS证书所在的目录。如果提供了--tls-cert-file和--tls-private-key-file,则将忽略此标志。(默认“/ var / lib / kubelet / pki”)

--cgroup-driver string
kubelet用于操作主机上的cgroup的驱动程序。

--cgroup-root string
用于pod的可选根cgroup。这由容器运行时以尽力而为的方式处理。默认值:'',表示使用容器运行时默认值。

--client-ca-file string
如果设置,则表示由client-ca文件中的某个权限签名的客户端证书的任何请求都将使用与客户端证书的CommonName对应的标识进行身份验证。

--cluster-dns stringSlice
以逗号分隔的DNS服务器IP地址列表。

--cluster-domain string
此群集的域。

--cni-bin-dir string
搜索CNI插件二进制文件的目录的完整路径。默认值:/ opt / cni / bin

--cni-conf-dir string
搜索CNI配置文件的目录的完整路径。默认值:/etc/cni/net.d

--container-hints string
容器提示文件的位置(默认为“/etc/cadvisor/container_hints.json”)

--container-runtime string
要使用的容器运行时。可能的值:'docker','remote','rkt(deprecated)'。(默认“docker”)

--container-runtime-endpoint string
[实验]远程运行时服务的端点。目前Linux上支持unix socket,Windows上支持tcp。

--docker string
docker endpoint(默认为“unix:///var/run/docker.sock”)

--docker-endpoint string
使用此命令与docker端点进行通信(默认为“unix:///var/run/docker.sock”)

--docker-root string
弃用:从docker info读取docker root(这是一个后备,默认:/ var / lib / docker)(默认为“/ var / lib / docker”)

--experimental-bootstrap-kubeconfig string
不推荐使用:使用--bootstrap-kubeconfig

--fail-swap-on
如果在节点上启用了交换,则Kubelet无法启动。

--healthz-bind-address 0.0.0.0
要服务的healthz服务器的IP地址(对于所有IPv4接口设置为0.0.0.0,对于所有IPv6接口设置为`::`)(默认为127.0.0.1)

--healthz-port int32
localhost healthz端点的端口(设置为0以禁用)(默认为10248)

--hostname-override string
如果非空,将使用此字符串作为标识而不是实际的主机名。

--image-gc-low-threshold int32
从不运行映像垃圾回收的磁盘使用百分比。垃圾收集到的最低磁盘使用率。(默认为80)

--image-pull-progress-deadline duration
如果在此截止日期之前没有拉动进度,则图像拉动将被取消。(默认1m0s)

--iptables-masquerade-bit int32
用于标记SNAT数据包的fwmark空间位。必须在[0,31]范围内。请将此参数与kube-proxy中的相应参数匹配。(默认14)

--kubeconfig string
kubeconfig文件的路径,指定如何连接到API服务器。提供--kubeconfig启用API服务器模式,省略--kubeconfig启用独立模式。

--kubelet-cgroups string
用于创建和运行Kubelet的cgroup的可选绝对名称。

--max-open-files int
Kubelet进程可以打开的文件数。(默认1000000)

--max-pods int32
可以在此Kubelet上运行的Pod数量。(默认110)

--network-plugin string
要为kubelet / pod生命周期中的各种事件调用的网络插件的名称

--node-ip string
节点的IP地址。如果设置,则kubelet将使用此IP地址作为节点

--node-labels mapStringString
在群集中注册节点时要添加的标签。

--pod-infra-container-image string
每个pod中的network / ipc命名空间容器将使用的映像。(默认为“k8s.gcr.io/pause:3.1”)

--pods-per-core int32
可以在此Kubelet上运行的每个核心的Pod数量。此Kubelet上的Pod总数不能超过max-pods,因此如果此计算导致Kubelet上允许更多Pod,则将使用max-pods。值为0将禁用此限制。

--port int32
Kubelet的服务端口。(默认为10250)

--tls-cert-file string
包含用于提供HTTPS的x509证书的文件(具有中间证书,如果有的话,在服务器证书之后连接)。如果未提供--tls-cert-file和--tls-private-key-file,则会为公共地址生成自签名证书和密钥,并将其保存到传递给--cert-dir的目录中。


--tls-private-key-file string
包含x509私钥匹配--tls-cert-file的文件。

kube-proxy.service

kube-proxy主要参数
--bind-address 0.0.0.0     默认: 0.0.0.0
要服务的代理服务器的 IP 地址(对于所有 IPv4 接口设置为 0.0.0.0,对于所有 IPv6 接口设置为 ::)

--cluster-cidr string
集群中的 CIDR 范围。 配置后,从该范围之外发送到服务集群 IP 的流量将被伪装,从 pod 发送到外部 LoadBalancer IP 的流量将被定向到相应的集群 IP

--config string
配置文件的路径。

--healthz-bind-address 0.0.0.0     默认: 0.0.0.0:10256
服务健康检查的 IP 地址和端口(对于所有 IPv4 接口设置为 0.0.0.0,对于所有 IPv6 接口设置为 ::)

--healthz-port int32     默认: 10256
绑定健康检查服务的端口。使用 0 禁用。

--hostname-override string
如果非空,将使用此字符串作为标识而不是实际的主机名。

--kube-api-burst int32     默认: 10
每秒与 kubernetes apiserver 交互的数量

--kubeconfig string
包含授权信息的 kubeconfig 文件的路径(master 位置由 master 标志设置)。

--master string
Kubernetes API 服务器的地址(覆盖 kubeconfig 中的任何值)

--metrics-bind-address 0.0.0.0     默认: 127.0.0.1:10249
要服务的度量服务器的 IP 地址和端口(对于所有 IPv4 接口设置为 0.0.0.0,对于所有 IPv6 接口设置为 ::)

--nodeport-addresses stringSlice
一个字符串值,指定用于 NodePorts 的地址。 值可以是有效的 IP 块(例如 1.2.3.0/24, 1.2.3.4/32)。 默认的空字符串切片([])表示使用所有本地地址。

--proxy-mode ProxyMode
使用哪种代理模式:'userspace'(较旧)或 'iptables'(较快)或 'ipvs'(实验)。 如果为空,使用最佳可用代理(当前为 iptables)。 如果选择了 iptables 代理,无论如何,但系统的内核或 iptables 版本不足,这总是会回退到用户空间代理。

--proxy-port-range port-range
主机端口的范围(beginPort-endPort,单端口或 beginPort + offset,包括),可以被代理服务流量消耗。 如果(未指定,0 或 0-0)则随机选择端口。

--write-config-to string
如果设置,将配置值写入此文件并退出。

yaml文件参数介绍