TOP

k8s 创建集群实战笔记

实验环境准备

三台机器

机器选择要求2c4g的配置比较好.

可以选择云平上的机器或者虚拟机

此处采取虚拟机方案. 省钱, 采用的虚拟机工具是 v_box 同样免费省钱

虚拟机安装前准备

镜像下载

镜像采用的是 CentOS-7-x86_64-DVD-2009.iso 

桥接网卡配置

网卡的网段设置成和自己本机的直连或者wifi一个网段

虚拟机安装

配置方面采用 最起码的2c2g, 主节点的机器给到4g保险起见 

网卡直接偷个懒搞两个. 一个桥接一个nat

(这里我老是容易调不好网络, 此方案属于比较水的举动, 但是可以解决虚拟机互通同时外网访问的问题, 省心一些)

ps:

  nat 避免彼此网段冲突可以使用此方法进行操作,  详情见这篇博文 

PS D:\v-boxs> .\VBoxManage modifyvm "k8s-worker-2" --natnet2 "172.2.0.0/24"
PS D:\v-boxs> .\VBoxManage modifyvm "k8s-worker-1" --natnet2 "172.1.0.0/24"

把系统光盘挂载上, 开机按照指引一步一步安装即可.

网络调整验证

 安装完成一台之后配置进入命令行界面. 登录验证后对 ip 进行调整

 调整的部分如下, 防止每次重启会导致dhcp的ip发生变化

TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=enp0s3
UUID=6d922c16-7dad-41fd-94dd-b972013374d3
DEVICE=enp0s3
ONBOOT=yes
IPADDR=172.16.204.92
GATEWAY=172.16.204.1
DNS1=10.80.30.235
DNS2=114.114.114.114

 修改完毕后重启网络

 service network restart

三台主机之间内网 ip 互通, 配置到和 桥接网卡一样的网段, 也就是 和你本机网络一样的网段

自行验证下, 三台机器互相ping 一下, 以及外网

 

ps:

  

  本次实验环境中 主节点的 ip 为 172.16.204.91 非常重要, 在配置主节点的时候需要用到

  其他两个节点的 ip 分别为 90 和 92

 安装 docker 

安装这里参考之前写的 docker 的文章, 这里这里

k8s 安装逻辑

安装流程

安装三个必备工具

kubectl 命令行工具, 不安装此工具将无法调用集群相关的内容

kubeadm 用于安装k8s, 协助管理集群, 集群安装完毕后可卸载 

kubelet 作为节点内必备的基础包. 必装

顺序 kubelet  - > kubectl  - > kubeadm 

指定主节点

安装完三个工具包后

指定一台主机进行 kubeadm init 初始化为主节点

在指定了主节点之后, 主节点的 kukelet 就会自行安装 

 这部分内容

 工作节点加入集群

非主节点的工作节点通过 kubeadm  join 到主节点即可完成集群的构建

而工作节点的 kubeadm 则会创建必须的 , 其他则不需要

安装环境准备

安装要求

修改主机名

hostnamectl set-hostname k8s-master

禁用SELinux

临时禁用

sudo setenforce 0 

永久禁用

sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config

关闭交换分区

要求 free -m 的时候 Swap 全部为 0 

 

 临时关闭

swapoff -a

永久关闭

sed -ri 's/.*swap.*/#&/' /etc/fstab

 允许 iptalbes 检查桥接流量

cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
br_netfilter
EOF

cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sudo sysctl --system

 安装三大件

指定源

cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
exclude=kubelet kubeadm kubectl
EOF

安装

yum install -y kubelet-1.20.9 kubeadm-1.20.9 kubectl-1.20.9  --disableexcludes=kubernetes

启动

sudo systemctl enable --now kubelet

使用 kubeadm 引导集群

镜像下载

下载各个机器需要的镜像, 生成一个 images.sh 的脚本

sudo tee ./images.sh <<-'EOF'
#!/bin/bash
images=(
kube-apiserver:v1.20.9
kube-proxy:v1.20.9
kube-controller-manager:v1.20.9
kube-scheduler:v1.20.9
coredns:1.7.0
etcd:3.4.13-0
pause:3.2
)
for imageName in ${images[@]} ; do
docker pull registry.cn-hangzhou.aliyuncs.com/lfy_k8s_images/$imageName
done
EOF

ps:

  只有主节点是需要这么多镜像的, 其他的子节点只需要 kube-proxy 镜像即可. 详情见逻辑图中的各节点组件构成

执行下载镜像命令

chmod +x ./images.sh && ./images.sh

添加 master 域名映射

在 所有的节点上添加 master 域名映射, master 的必须加,  其他的倒是无所谓

echo "172.16.204.91 cluster-endpoint" >> /etc/hosts

echo "172.16.204.90 cluster-node-1" >> /etc/hosts
echo "172.16.204.92 cluster-node-2" >> /etc/hosts

校验是否成功

 

主节点操作

安装命令行提示工具

yum install bash-completion -y

source /usr/share/bash-completion/bash_completion 

source <(kubectl completion bash)

echo "source <(kubectl completion bash)" >> ~/.bashrc

 安装了敲命令方便省心一些

初始化

以下命令只在主节点进行执行, 工作节点无需操作

kubeadm init \
  --apiserver-advertise-address=172.16.204.91 \
  --control-plane-endpoint=cluster-endpoint \
  --image-repository registry.cn-hangzhou.aliyuncs.com/lfy_k8s_images\
  --kubernetes-version v1.20.9 \
  --service-cidr=10.96.0.0/16 \
  --pod-network-cidr=192.168.0.0/16

标橙色的部分为根据自己的真实情况填写, 分别是 主节点的地址以及主节点的域名

标绿色的部分不按需修改, 至少满足各个网段不能冲突 

当看到以下画面时. 表示安装成功

  这段打印要复制一下, 以后要用到

Your Kubernetes control-plane has initialized successfully!

To start using your cluster, you need to run the following as a regular user:

  mkdir -p $HOME/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config

Alternatively, if you are the root user, you can run:

  export KUBECONFIG=/etc/kubernetes/admin.conf

You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
  https://kubernetes.io/docs/concepts/cluster-administration/addons/

You can now join any number of control-plane nodes by copying certificate authorities
and service account keys on each node and then running the following as root:

  kubeadm join cluster-endpoint:6443 --token syll4s.5xrkwga7ttg2wkg2 \
    --discovery-token-ca-cert-hash sha256:7a366fe0e8dc56277848736dd469ffbf8574dace5f3edc3b159237c0e7ec0ed7 \
    --control-plane

Then you can join any number of worker nodes by running the following on each as root:

kubeadm join cluster-endpoint:6443 --token syll4s.5xrkwga7ttg2wkg2 \
    --discovery-token-ca-cert-hash sha256:7a366fe0e8dc56277848736dd469ffbf8574dace5f3edc3b159237c0e7ec0ed7

红色划线部分是重点, 马上就要执行, 

棕色加粗的部分是可选的, 用于创建一个网络插件

橙色加粗的部分用于主节点的接入

绿色加粗部分则用于工作节点的接入

校验是否成功

可以看到节点列表里面应该有了主节点存在, 标识主节点初始化成功

此时可以看到 STATUS 状态为 NotReady 是因为网络插件还没安装, 所以未就绪

令牌过期处理

执行此命令可以重新生成绿色部分, 默认最开始的那个是只有24小时的有效期的

kubeadm token create --print-join-command

网路插件安装

网络插件的种类繁多通过上面这串的打印的部分可以看到有官方介绍 就是那段链接 这个这个

这里选择使用 calico , 下载 yaml 配置文件

curl https://docs.projectcalico.org/manifests/calico.yaml -O

执行应用配置文件创建资源

kubectl apply -f calico.yaml

ps: 

  如果在 pod-network-cidr 处进行了自定义, 则 配置文件中的部分也要做相应的修改

   

 校验安装结果

docker ps 
kubectl get pods -A

 

ps:

  一些nat的问题处理, 如果出现 calico-node-xxxx running 了但是一直无法 ready 的情况, 有可能是网卡选择错误导致

  需要进行编辑配置文件处理, 

kubectl edit ds calico-node -n kube-system

  添加下两行在配置中

        - name: IP_AUTODETECTION_METHOD
          value: interface=enp0s3

工作节点操作

防火墙处理

检查防火墙

systemctl status firewalld

关闭防火墙

systemctl stop firealld.service

systemctl disable firewalld

端口转发处理

 虚拟机环境可能存在以下报错, 最好检查下不然会导致节点加入集群的时候存在这个报错

[ERROR FileContent--proc-sys-net-ipv4-ip_forward]: /proc/sys/net/ipv4/ip_forward contents are not set to 1


这个报错用这个解决
sysctl -w net.ipv4.ip_forward=1

 加入集群

master 节点的那个绿色部分在工作节点操作即可加入集群

kubeadm join cluster-endpoint:6443 --token syll4s.5xrkwga7ttg2wkg2 \
    --discovery-token-ca-cert-hash sha256:7a366fe0e8dc56277848736dd469ffbf8574dace5f3edc3b159237c0e7ec0ed7

 验证

查看下master 的pods 状态全部为 runing 则没问题

 

 

posted @ 2021-12-16 20:33  羊驼之歌  阅读(268)  评论(0编辑  收藏  举报