带你玩转kubernetes-k8s(第9篇:k8s-使⽤kubeadm安
装,Kubect。。。
⼤家好,我们⼜见⾯了,现在说明⼀下哈,每周更新5篇哦。
kubeadm config
kubeadm已经进⼊GA阶段,其控制⾯初始化和加⼊节点步骤都⽀持⼤量的可定制内容,因此kubeadm还提供了配置⽂件功能⽤于复杂定制。同时,kubeadm将配置⽂件以ConfigMap的形式保存到集之中,便于后续的查询和升级⼯作。kubeadm config之命令提供了对这⼀组功能的⽀持:nginx ssl证书配置
◎ kubeadm config upload from-file:由配置⽂件上传到集中⽣成ConfigMap。
◎ kubeadm config upload from-flags:由配置参数⽣成ConfigMap。
◎ kubeadm config view:查看当前集中的配置值。
◎ kubeadm config print init-defaults:输出kubeadm init默认参数⽂件的内容。
◎ kubeadm config print join-defaults:输出kubeadm join默认参数⽂件的内容。
◎ kubeadm config migrate:在新旧版本之间进⾏配置转换。
◎ kubeadm config images list:列出所需的镜像列表。
◎ kubeadm config images pull:拉取镜像到本地。
获取默认初始化参数
kubeadm config print init-dafaults > init.default.yaml
基于CA签名的双向数字证书认证⽅式
我们现在讲解如何以CA证书的⽅式配置k8s集,要求Master上的kube-apiserver、kube-croller-manage、kube-scheduler进程进⾏CA签名双向数字证书安全设置。
基于CA签名的双向数字证书的⽣成过程如下。
(1)为kube-apiserver⽣成⼀个数字证书,并⽤CA证书签名。
(2)为kube-apiserver进程配置证书相关的启动参数,包括CA证书(⽤于验证客户端证书的签名真伪)、⾃⼰的经过CA签名后的证书及私钥。
(3)为每个访问Kubernetes API Server的客户端(如kube-controller-manager、kube-scheduler、kubelet、kube-proxy及调⽤API Server的客户端程序kubectl等)进程都⽣成⾃⼰的数字证书,也都⽤CA证书签名,在相关程序的启动参数⾥增加CA证书、⾃⼰的证书等相关参数。
1.设置kube-apiserver的CA证书相关的⽂件和启动参数
使⽤OpenSSL⼯具在Master服务器上创建CA证书和私钥相关的⽂件:
[root@k8s-master1 home]# openssl genrsa -out ca.key 2048
Generating RSA private key, 2048 bit long modulus ................................................................................................................+++ ................................................+++
e is 65537 (0x10001)
[root@k8s-master1 home]# openssl req -x509 -new -nodes -key ca.key -subj "/CN=k8s-master1" -days 5000 -
[root@k8s-master1 home]# openssl genrsa -out server.key 2048
Generating RSA private key, 2048 bit long modulus ...................................................................+++
.+++
e is 65537 (0x10001)
[root@k8s-master1 home]#
注意:在⽣成ca.crt时,-subj参数中“/CN”的值为Master主机名。
准备master_sslf⽂件,该⽂件⽤于x509 v3版本的证书。在该⽂件中主要需要设置Master服务器的hostname(k8s-master1)、IP 地址(),以及Kubernetes Master Service的虚拟服务名称(kubernetes.default等)和该虚拟服务的ClusterIP地址
(10.96.0.1)。
master_sslf⽂件的实例如下:
[root@k8s-master1 home]# cat master_sslf
[req]
req_extensions=v3_req
distinguished_name=req_distinguished_name
[req_distinguished_name]
[ v3_req ]
basicConstraints=CA:FALSE
keyUsage=nonRepudiation,digitalSignature,keyEncipherment
subjectAltName=@alt_names
[alt_names]
DNS.1=kubernetes
DNS.2=kubernetes.default
DNS.3=kubernetes.default.svc
DNS.4=kubernetes.default.svc.cluster.local
DNS.5=k8s-master1
IP.1=10.96.0.1
IP.2=20.0.40.51
基于master_sslf创建server.csr和⽂件。在⽣成server.csr时,-subj参数中“/CN”的值需为Master的主机名:
openssl req -new -key server.key -subj "/CN=k8s-master1" -config master_sslf -out server.csr
[root@k8s-master1 home]# openssl x509 -req -in server.csr - -CAkey ca.key -CAcreateserial -days 5000 -extensions v3_req -extfile master_ssl.c Signature ok
subject=/CN=k8s-master1
Getting CA Private Key
在全部执⾏完后会⽣成6个⽂件:ca.crt、ca.key、ca.srl、、server.csr、server.key。
将这些⽂件复制到⼀个⽬录下(例如/var/run/kubernetes/),然后设置kube-apiserver的三个启动参数“--client-ca-file”“--tls-
cert-file”和“--tls-private-key-file”,分别代表CA根证书⽂件、服务端证书⽂件和服务端私钥⽂件:
这⼀部分内容是⼆进制安装过程的步骤,我们使⽤的是kubeadm安装的k8s,在安装过程中k8s默认给我们⽣成了ca,并加⼊了启动项
⼆进制的安装我们后⾯会带着⼤家来搭建⼀个⽣产环境。
CRI(容器运⾏时接⼝)详解
kubernetes Node(kubelet)的主要功能就是启动和停⽌容器的组件,我们称之为容器运⾏时(Container Runtime),其中最致命的就是Docker 了。
kubelet使⽤gRPC框架通过UNIX Socket与容器运⾏时(或CRI代理)进⾏通信。在这个过程中kubelet是客户端,CRI代理(shim)是服务端,
Protocol Buffers API包含两个gRPC服务:ImageService和RuntimeService。
ImageService提供了从仓库拉取镜像、查看和移除镜像的功能。
RuntimeService负责Pod和容器的⽣命周期管理,以及与容器的交互(exec/attach/port-forward)。rkt和Docker这样的容器运⾏时可以使⽤⼀个Socket同时提供两个服务,在kubelet中可以⽤--container-runtime-endpoint和--image-service-endpoint参数设置这个Socket。
Pod由⼀组应⽤容器组成,其中包含共有的环境和资源约束。在CRI⾥,这个环境被称为PodSandbox。Kubernetes有意为容器运⾏时留下⼀些发挥空间,它们可以根据⾃⼰的内部实现来解释PodSandbox。
对于Hypervisor类的运⾏时,PodSandbox会具体化为⼀个虚拟机。其他例如Docker,会是⼀个Linux命名空间。在v1alpha1 API
中,kubelet会创建Pod级别的cgroup传递给容器运⾏时,并以此运⾏所有进程来满⾜PodSandbox对Pod的资源保障。
在启动Pod之前,kubelet调⽤RuntimeService.RunPodSandbox来创建环境。这⼀过程包括为Pod设置⽹络资源(分配IP等操作)。PodSandbox被激活之后,就可以独⽴地创建、启动、停⽌和删除不同的容器了。kubelet会在停⽌和删除PodSandbox之前⾸先停⽌和删除其中的容器。
kubelet的职责在于通过RPC管理容器的⽣命周期,实现容器⽣命周期的钩⼦,存活和健康监测,以及执⾏Pod的重启策略等。
Kubernetes为⽤户提供了与Pod及其中的容器进⾏交互的功能(kubectl exec/attach/port- forward)。kubelet⽬前提供了两种⽅式来⽀持这些功能。
(1)调⽤容器的本地⽅法。
(2)使⽤Node上的⼯具(例如nsenter及socat)。
在设计CRI时,要让容器运⾏时能够跳过中间过程。容器运⾏时可以启动⼀个单独的流式服务来处理请求(还能对Pod的资源使⽤情况进⾏记录),并将服务地址返回给kubelet。这样kubelet就能反馈信息给API Server,使之可以直接连接到容器运⾏时提供的服务,并连接到客户端。
尝试使⽤新的Docker-CRI来创建容器
kubectl run nginx --image=nginx
kubectl命令⼯具⽤法详解
(1)显⽰Pod的更多信息:
kubectl get pod <pod-name> -o wide
(2)以YAML格式显⽰Pod的详细信息:
kubectl get pod<pod-name> -o yaml
(3)以⾃定义列名显⽰Pod的信息:
kubectl get pod <pod-name> -o=custom-columns=NAME:.metadata.name,RSRC:.sourceVersion (4)基于⽂件的⾃定义列名输出:
kubectl get pods <pod-name> -o=
另外,可以将输出结果按某个字段排序,通过--sort-by参数以jsonpath表达式进⾏指定:
例如,按照名称进⾏排序:
kubectl get pods --sort-by=.metadata.name
1.创建资源对象
根据YAML配置⽂件⼀次性创建Service和RC:
kubectl create -f my-service.yaml 0f my-rc.yaml
根据<directory>⽬录下所有.yaml、.yml、.json⽂件的定义进⾏创建:kubectl create -f <directory>
2.查看资源对象
查看所有Pod列表:
kubectl get pod --all-namespaces
查看RC和Service列表:
kubectl get rc,service --all-namespaces
3.描述资源对象
显⽰Node的详细信息:
kubectl describe nodes <node-name>
显⽰Pod的详细信息:
kubectl describe pods/<pod-name>
显⽰由RC管理的Pod的信息:
kubectl describe pods <rc-name>
4.删除资源对象
基于pod.yaml定义的名称删除Pod:
kubectl  delete -f pod.yaml
删除所有包含某个Label的Pod和Service:
kubecl delete pods,services -l name=<label-name>
删除所有Pod:
kubectl delete pods --all
5.执⾏容器的命令
执⾏Pod的date命令,默认使⽤Pod中的第1个容器执⾏:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。