systemctl stop firewalld
6 systemctl disable firewalld
7 swapoff -a
8 swapoff -a && sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
9 setenforce 0 && sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
10 cat >/etc/sysctl.d/k8s.conf << EOF
11 net.bridge.bridge-nf-call-ip6tables = 1
12 net.bridge.bridge-nf-call-iptables = 1
13 EOF
14 sysctl --system
15 wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
16 yum -y install docker-ce-18.06.1.ce-3.el7
17 systemctl enable docker && systemctl start docker
18 docker --version
19 Setup daemon.
20 cat > /etc/docker/daemon.json <<EOF
21 {
22 "exec-opts": ["native.cgroupdriver=systemd"],
23 "log-driver": "json-file",
24 "log-opts": {
25 "max-size": "100m"
26 },
27 "storage-driver": "overlay2",
28 "storage-opts": [
29 "overlay2.override_kernel_check=true"
30 ]
31 }
32 EOF
33 mkdir -p /etc/systemd/system/docker.service.d
34 systemctl daemon-reload
35 systemctl restart docker
36 vi /etc/yum.repos.d/kubernetes.repo
37 yum install -y kubelet-1.15.0 kubeadm-1.15.0 kubectl-1.15.0
38 systemctl enable kubelet.service
####### 以上为master、node节点都执行的命令
####### master节点执行
39 kubeadm init --apiserver-advertise-address=172.31.127.207 --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.15.0 --service-cidr=10.1.0.0/16 --pod-network-cidr=10.244.0.0/16
40 kubectl get pod
41 echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile
42 source ~/.bash_profile
43 journalctl -f
47 mkdir -p $HOME/.kube
48 sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
49 sudo chown $(id -u):$(id -g) $HOME/.kube/config
####### 子节点执行
kubeadm join 172.31.127.207:6443 --token d08vcr.v56im5z8m77yurfx --discovery-token-ca-cert-hash sha256:011e50c561e9a569574f4644cc2a59bd156f2b31bc141552010e4aa2410960eb
####### 回到master节点执行
57 kubectl get pods -n kube-system
58 kubectl get namespace
59 kubectl get pods --all-namespaces
60 history
####### flannel会存在版本问题,使用以下版本,只在master节点安装flannel即可
67 wget https://raw.githubusercontent.com/coreos/flannel/bc79dd1505b0c8681ece4de4c0d86c5cd2643275/Documentation/kube-flannel.yml
68 kubectl apply -f kube-flannel.yml
69 kubectl get nodes
70 kubectl get pods --all-namespaces
71 kubectl get nodes
72 kubectl get pods --all-namespaces
这段脚本是用于设置和初始化 Kubernetes 集群的。它包含了在 master 节点和 worker 节点上需要执行的命令。以下是对这些命令的详细解释:
systemctl stop firewalld
和systemctl disable firewalld
:停止并禁用防火墙服务,以确保 Kubernetes 集群内的通信不会被防火墙阻挡。
2-3. swapoff -a
:关闭所有的交换分区(swap)。Kubernetes 集群节点通常要求禁用 swap,因为 swap 会导致集群性能问题。
swapoff -a && sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
:除了关闭当前的 swap 外,还确保下次启动时 swap 也不会被启用,通过注释掉/etc/fstab
文件中的 swap 条目。
5-6. setenforce 0 && sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
:临时和永久地禁用 SELinux,因为 SELinux 的安全策略可能会与 Kubernetes 的操作冲突。
7-13. 创建 /etc/sysctl.d/k8s.conf
文件并设置内核参数,允许 Kubernetes 使用网络桥接。
-
sysctl --system
:应用新设置的内核参数。 -
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
:从阿里云镜像站下载 Docker 的 yum 仓库配置文件。 -
yum -y install docker-ce-18.06.1.ce-3.el7
:安装指定版本的 Docker。
17-18. 启动 Docker 服务并检查 Docker 版本。
Setup daemon.
:这行是注释,表示接下来要配置 Docker daemon。
20-32. 创建 /etc/docker/daemon.json
文件并配置 Docker daemon 的选项,包括使用 systemd 作为 cgroup 驱动、设置日志驱动和选项、存储驱动等。
-
mkdir -p /etc/systemd/system/docker.service.d
:创建目录,用于存放 Docker 服务的 systemd 配置文件。 -
systemctl daemon-reload
:重新加载 systemd 配置,以确保新创建的 Docker 配置生效。 -
systemctl restart docker
:重启 Docker 服务以应用新的配置。 -
vi /etc/yum.repos.d/kubernetes.repo
:编辑 Kubernetes 的 yum 仓库配置文件(这里没有给出具体配置内容)。 -
yum install -y kubelet-1.15.0 kubeadm-1.15.0 kubectl-1.15.0
:安装指定版本的 Kubernetes 组件:kubelet(节点代理)、kubeadm(集群初始化工具)和 kubectl(命令行工具)。 -
systemctl enable kubelet.service
:启用 kubelet 服务,确保在系统启动时自动运行。
39-43. 在 master 节点上执行:
- 使用
kubeadm init
初始化 Kubernetes master 节点。 - 使用
kubectl get pod
查看集群中的 Pod 状态。 - 将 admin.conf 配置文件的路径添加到
.bash_profile
,使得 kubectl 可以使用正确的配置。 - 刷新
.bash_profile
以应用更改。 - 使用
journalctl -f
查看系统日志。
47-49. 将 admin.conf 配置文件复制到用户家目录下的 .kube
文件夹中,并设置正确的权限,以便用户能够使用 kubectl 命令。
在子节点(worker 节点)上执行的命令(这里没有列出,但根据注释应该是):
- 使用
kubeadm join
命令将 worker 节点加入 Kubernetes 集群。
这部分脚本主要关注于 Kubernetes 集群的后期配置和验证,以及 flannel 网络插件的安装。以下是这些命令的详细解释:
-
kubectl get pods -n kube-system
:获取在kube-system
命名空间下的所有 Pod 的状态。kube-system
命名空间通常包含 Kubernetes 系统的核心组件,如 kube-controller-manager、kube-scheduler、kube-proxy 等。 -
kubectl get namespace
:列出集群中所有的命名空间。 -
kubectl get pods --all-namespaces
:获取集群中所有命名空间下的所有 Pod 的状态。 -
history
:这个命令通常用于 Bash shell 中,用来显示之前执行过的命令历史。在这个上下文中,它可能是用来查看或复制之前执行过的命令。
67-68. 这两行命令用于安装 flannel 网络插件:
wget https://raw.githubusercontent.com/coreos/flannel/bc79dd1505b0c8681ece4de4c0d86c5cd2643275/Documentation/kube-flannel.yml
:从 GitHub 上指定的 commit 下载 flannel 的配置文件kube-flannel.yml
。kubectl apply -f kube-flannel.yml
:使用kubectl
命令应用这个配置文件,从而安装 flannel。
69-72. 这些命令用于验证集群和 flannel 的状态:
kubectl get nodes
:列出集群中的所有节点。kubectl get pods --all-namespaces
:再次获取集群中所有命名空间下的所有 Pod 的状态,以确认 flannel Pod 是否已正确运行。kubectl get nodes
:重复列出集群中的所有节点,可能是为了查看节点状态是否有所更新(例如,节点是否已就绪)。kubectl get pods --all-namespaces
:再次获取集群中所有 Pod 的状态,可能是为了进一步确认 flannel 是否正常工作。
注意:
- 使用特定版本的 flannel 是为了避免潜在的版本兼容性问题。这里的
bc79dd1505b0c8681ece4de4c0d86c5cd2643275
是一个 Git commit 哈希值,它指向 flannel 的一个特定版本。 - 通常,flannel 只需要在 master 节点上安装,因为它会作为 DaemonSet 运行,在集群的每个节点上自动部署 Pod。
确保在执行这些命令之前,你已经按照之前的步骤成功初始化了 Kubernetes 集群,并且所有的节点都是可达和健康的。此外,如果你之前已经安装过其他网络插件,可能需要先卸载它们,以避免插件之间的冲突。
请注意,脚本中有些命令可能需要根据你的具体环境进行调整,例如 Kubernetes 和 Docker 的版本、镜像仓库地址、网络 CIDR 等。此外,执行这些命令之前,请确保你具有足够的权限(通常是 root 权限),并且已经备份了重要数据。