记录一次在阿里云kubeadm安装k8s集群命令脚本,容器使用docker,版本v1.15

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 节点上需要执行的命令。以下是对这些命令的详细解释:

  1. systemctl stop firewalld 和 systemctl disable firewalld:停止并禁用防火墙服务,以确保 Kubernetes 集群内的通信不会被防火墙阻挡。

2-3. swapoff -a:关闭所有的交换分区(swap)。Kubernetes 集群节点通常要求禁用 swap,因为 swap 会导致集群性能问题。

  1. 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 使用网络桥接。

  1. sysctl --system:应用新设置的内核参数。

  2. wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo:从阿里云镜像站下载 Docker 的 yum 仓库配置文件。

  3. yum -y install docker-ce-18.06.1.ce-3.el7:安装指定版本的 Docker。

17-18. 启动 Docker 服务并检查 Docker 版本。

  1. Setup daemon.:这行是注释,表示接下来要配置 Docker daemon。

20-32. 创建 /etc/docker/daemon.json 文件并配置 Docker daemon 的选项,包括使用 systemd 作为 cgroup 驱动、设置日志驱动和选项、存储驱动等。

  1. mkdir -p /etc/systemd/system/docker.service.d:创建目录,用于存放 Docker 服务的 systemd 配置文件。

  2. systemctl daemon-reload:重新加载 systemd 配置,以确保新创建的 Docker 配置生效。

  3. systemctl restart docker:重启 Docker 服务以应用新的配置。

  4. vi /etc/yum.repos.d/kubernetes.repo:编辑 Kubernetes 的 yum 仓库配置文件(这里没有给出具体配置内容)。

  5. yum install -y kubelet-1.15.0 kubeadm-1.15.0 kubectl-1.15.0:安装指定版本的 Kubernetes 组件:kubelet(节点代理)、kubeadm(集群初始化工具)和 kubectl(命令行工具)。

  6. 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 网络插件的安装。以下是这些命令的详细解释:

  1. kubectl get pods -n kube-system:获取在 kube-system 命名空间下的所有 Pod 的状态。kube-system 命名空间通常包含 Kubernetes 系统的核心组件,如 kube-controller-manager、kube-scheduler、kube-proxy 等。

  2. kubectl get namespace:列出集群中所有的命名空间。

  3. kubectl get pods --all-namespaces:获取集群中所有命名空间下的所有 Pod 的状态。

  4. 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 权限),并且已经备份了重要数据。

  • 20
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值