[K8S] 02 - Init k8s Cluster
本篇章主要是实战。
Kubernetes Pod 概念
Pod 解析
可能封装多个容器。
同一个Pod内部,既共享网络,也共享存储。
确实这里讲的不好,换一个教程再开始。
极速入门教程
Ref: 2020年最新 黑马程序员 - Kubernetes(K8S)超快速入门教程(完整资料)
2015年7月 release v1.0。
2017年 docker宣布原生支持k8s。
集群部署
部署前的自我提问。
Hardware
硬件要求,并创建三台虚拟机 CentOS 7:master + 2*slaves
System
部署方式有两种:
- 二进制源码包部署。
- 使用kubeadm部署。(或者 minKube)
以下部分,最好 follow video step by step。
-
VMware + CentOS
安装虚拟机:12 kubernetes极速入门 k8s集群部署 主机准备 主机名设置
配置好网络:13 kubernetes极速入门 k8s集群部署 主机准备 IP设置及主机名解释
多操作模式的 Remote Terminal, 名字:MobaXterm Professional
sed 命令 可用于 替换文件的某段字符串。
-
安全配置
-- 主机安全配置
-- selinux配置
-
网桥过滤的模块
添加网桥过滤以及地址转发。
Ref: 17 kubernetes极速入门 k8s集群部署 主机准备 配置主机网桥过滤功能
/etc/sysctl.d/k8s.conf
$ modprobe br_netfilter
$ lsmod | grep br_netfilter
-
配置 IPVS
IPVS基本上是一种高效的Layer-4交换机,它提供负载平衡的功能。
安装 ipset, ipvsadm。
Software
Ref: 19 kubernetes极速入门 k8s集群部署 docker安装
k8s的最小管理单元是Pod, 不是docker。
-
软件安装
安装 Docker-ce等。
安装 kubelet, kubeadm, kubectl, docker-ce
Ref: 20 kubernetes极速入门 k8s集群部署 集群软件安装及配置
复习三者的关系,如下图。
添加yum源,具体安装过程,见原视频step by step。
/etc/yum.repos.d/k8s.repo
-
集群镜像准备
Ref: 21 kubernetes极速入门 k8s集群部署 集群镜像准备(感觉这里开始是重点)
kubeadm部署集群,是以Pod 为单位。分配镜像时,不同角色主机 准备 不同镜像,如下所示。
[Master主机镜像]
下载这些镜像。
以上是将要下载的images。写成下面脚本的形式,统一执行。
$ kubeadm config images list >> image.list
下载后,检查主机上有哪些镜像。
[Worker主机镜像]
只需要两个镜像。可以从master中拷贝即可,不用再下载浪费时间。
k8s.gcr.io/kube-proxy:v1.17.2 k8s.gcr.io/pause:3.1
-
- Dump
-
- Load
docker load -i kube-p.tar
docker load -i p.tar
到此为止,硬件、系统、软件准备完毕。
集群初始化
Ref: 22 kubernetes极速入门 k8s集群部署 集群初始化
-
初始化命令
$ kubeadm init
--kubernetes-version=v1.17.2
--pod-network-cidr=172.16.0.0/16
--apiserver-advertise-address=192.168.216.100 # 当前主机的ip
k8s涉及到三层网络:
-
- 节点网络(管理员配 置的)、
- 集群网络(网络插件 配置)、
- Pod 网络(网络插件 配置)。
执行后,Log 中会提示 “命令”。
-
- 相关证书生成。
- k8s配置:admin.conf, kubelet.conf, etc。
- control-plane初始化完成,开始复制一段 log,从下面开始 直到 the end of log,保存在文件:kubernetes.txt
Your Kubernetes control-plane has initialized successfully!
记得保存下来这个init log,方便之后查询。
-
Worker节点
目标:先配置,再加入到集群中。
Step 1, admin.conf
Step 2, 部署一个pod网络
拷贝./calico-39到三台机器。通过 docker load -i <.tar> 加载下面文件 in all nodes.
calico-cni.tar calico.yml pod2daemon-flexvol.tar calico-node.tar kube-controllers.tar
然后在master中修改 calico.yml。因为其中本身有点小问题。
已准备好 calico.yml,然后执行命令,创建了资源对象。
kubectl apply -f calico.yml
Step 3, 可以添加任意数量的work节点到集群中。
拷贝log中的 kubeadm join命令,并在work node中执行。
在master节点中,执行如下, double check the work nodes.
$ kubectl get nodes
验证集群可用性
部署后,需要一个验证过程,确定其处于“可用状态”。
$ kubectl get nodes
$ kubectl get cs
$ kubectl cluster-info
$ kubectl get pods --namespace kube-system # 查看所有pod的状态
关闭集群
Ref: 如何删除Kubernetes部署
删除单个部署
Kubernetes部署运行您的应用程序的多个副本,并自动替换任何失败或无响应的实例。
在练习Kubernetes时,通常需要删除Kubernetes部署。
借助kubectl delete Deployments命令,删除部署非常容易:
root@kmaster-rj:~# kubectl get deployments NAME READY UP-TO-DATE AVAILABLE AGE my-dep 2/2 2 2 4m22s # 获得部署名称后,只需像这样使用它: kubectl delete deployments my-dep # 它应该显示一个输出,告诉您已删除部署: root@kmaster-rj:~/pod-create# kubectl delete deployments my-dep deployment.apps "my-dep" deleted # 您可以通过检查可用的部署来验证它: root@kmaster-rj:~/pod-create# kubectl get deployments No resources found in default namespace.
您也可以使用deploy或部署(带有s)来代替kubectl delete deployment命令中的部署。全部都是一样。
删除多个部署
# 您可以像这样删除多个Kubernetes部署: root@kmaster-rj:~/pod-create# kubectl delete deployment my-dep my-dep-2 # 或者使用其YAML配置文件删除Kubernetes部署 # 我正在使用Deployment-definition.yml文件创建新的部署: root@kmaster-rj:~/pod-create# kubectl apply -f deployment-definition.yml deployment.apps/my-dep created # 您可以立即看到“部署”: root@kmaster-rj:~/pod-create# kubectl get deployments NAME READY UP-TO-DATE AVAILABLE AGE my-dep 2/2 2 2 49s # 现在,如果您引用相同的YAML文件以进行删除,则它将删除与该文件关联的资源(此处为部署)。 root@kmaster-rj:~/pod-create# kubectl delete -f deployment-definition.yml deployment.apps "my-dep" deleted # 您可以通过列出所有部署来验证它: root@kmaster-rj:~/pod-create# kubectl get deployments No resources found in default namespace.
In a nutshell
End.