一、预备环境搭建前提

1.准备3台linux服务器,系统是centos
2.每台机器运行内存2G或更多的内存(如果少于2G将会影响你的应用运行)
3.cpu是2核或者更多
4.集群中所有机器的网络彼此均能连接(公网或者内网都可以)
5.节点中不可以设置重复的主机名、mac地址或uuid
6.开启机器上的某些端口
7.禁用交换分区,才能保证kubernetes正常工作

二、机器准备 

在mac上使用vmware搭建3台虚拟机
搭建第一台虚拟机

2.1 新建虚拟机

2.2 使用镜像安装

2.3 导入镜像

2.4 创建新的虚拟机

2.5 一步一步执行

2.6 虚拟机创建完成

2.7 设置静态网络

1.进入网络设置

2.设置子网ip

3.进入网络适配器

4.选择vmnet6网络

5.网卡配置

更改完成后重启服务器即可

6.查看服务器ip

2.8 安装k8s前配置修改

1.设置机器域名
hostnamectl set-hostname xxxx

2.将 SELinux 设置为 permissive 模式(相当于将其禁用)
setenforce 0    --临时关闭
sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config    --永久关闭

3.关闭swap
swapoff -a    --临时关闭
sed -ri 's/.*swap.*/#&/' /etc/fstab    --永久关闭

4.允许 iptables 检查桥接流量
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

sysctl --system.   --重启

5.关闭防火墙
为保证后续端口访问方便,这里关闭防火墙
systemctl stop firewalld     --临时关闭防火墙
systemctl disable firewalld  --永久关闭防火墙

2.9 其他两台node节点配置与上面master节点一致步骤相同

最终可以使用crt连接上这三台服务器

三、安装docker

参考我的docker安装即可,这里不做过多演示

四、安装kubectl、kubelet、kubeadm

4.1 kubernetes下载地址

三个节点上都执行
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

4.2 安装kubelet、kubeadm、kubectl

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

4.3 默认启动kubelet

systemctl enable --now kubelet

4.4 下载各个机器需要的镜像

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
   
--执行脚本
chmod +x ./images.sh && ./images.sh

--查看下载的镜像
docker images

4.5 初始化主节点

#所有机器添加master域名映射,以下需要修改为自己的
echo "xxx.xxx.xxx.xxx  cluster-endpoint" >> /etc/hosts    --xxx.xxx.xxx.xxx 地址为master的ip信息 --cluster-endpoint 可以随便起名
添加上述命令含义:需让所有节点知道master是哪一个

所有节点都可以ping通这个域名

#主节点初始化
kubeadm init \
--apiserver-advertise-address=xxx.xxx.xxx.xxx \    --xxx.xxx.xxx.xxx为master节点的ip
--control-plane-endpoint=cluster-endpoint \        --cluster-endpoint 上面起的名字
--image-repository registry.cn-hangzhou.aliyuncs.com/lfy_k8s_images \   --镜像仓库名字
--kubernetes-version v1.20.9 \  --kubernetes的版本号
--service-cidr=10.96.0.0/16 \  
--pod-network-cidr=192.168.0.0/16
note:这里建议service和pod的ip信息不要改,如果要改,service和pod的ip段不能重复,也不能和服务器的ip段重复

出现上面照片的这句话,则说明主节点初始化成功,需要注意,要将这句话下面的打印内容全部复制出来留存,后续会用到

初始化后日志:
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 3544u6.rm82nfhekic8wkr9 \
    --discovery-token-ca-cert-hash sha256:ff2bfa162a305f9d8e270b91f700c110ad771c498674343fba776a1901ac68eb \
    --control-plane 

Then you can join any number of worker nodes by running the following on each as root:
####备注:如果需要将某个服务器加入worker节点,使用下面命令
kubeadm join cluster-endpoint:6443 --token 3544u6.rm82nfhekic8wkr9 \
    --discovery-token-ca-cert-hash sha256:ff2bfa162a305f9d8e270b91f700c110ad771c498674343fba776a1901ac68eb

4.6 执行主节点初始化日志后的步骤

在主节点上执行
  mkdir -p $HOME/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config

很简单不解释

4.7 使用命令查看

kubectl get nodes

查看主节点状态不对,目前是NotReady,这个问题是因为网络组件未配置导致的,在主节点初始化日志中有这一步

kubectl get pods -A

可以看到有两个namespace未启动成功

4.8 网络组件配置

使用日志中输入的网络组件配置网址会发现有问题,可以使用下面的这个网址自己下载
#calico官网:
https://docs.tigera.io/calico/latest/getting-started/kubernetes/self-managed-onprem/onpremises#install-calico-with-kubernetes-api-datastore-more-than-50-nodes
直接在服务器上下载

#下载calico配置文件
curl  https://docs.projectcalico.org/v3.20/manifests/calico.yaml -O

使用命令加载yaml配置文件
kubectl apply -f calico.yaml

这里执行完毕后可能遇到 calico 镜像ImagePullBackOff的问题,从以下链接中下载镜像上传服务器解压后,docker load 加载镜像

链接: https://pan.baidu.com/s/1llw_wierLyNrKpe_LURIhg 提取码: TYB1 

4.9 网络组件加载完毕后再查看主节点状态

kubectl get nodes

状态变更为Ready,此时k8s主节点启动成功

kubectl get pods -A

4.10 加入node节点

kubeadm join cluster-endpoint:6443 --token 3544u6.rm82nfhekic8wkr9 \
    --discovery-token-ca-cert-hash sha256:ff2bfa162a305f9d8e270b91f700c110ad771c498674343fba776a1901ac68eb

4.11 k8s集群启动成功

kubectl get nodes

这里可能遇到加入work节点加入后master节点calico-node ready 0/1 的情况;

故障现象:
kubenetes安装calico发现其中一个处于Running,但READY列却显示不正常,状态如下图所示:

2、寻找原因
进入到出现故障 pod,查看router id值发现绑定地址异常,并非宿主机的IP地址

[root@master01 ~]# kubectl exec -ti calico-node-j4f5m -n kube-system -- bash
[root@k8s-master1 /]# cat /etc/calico/confd/config/bird.cfg

   calico.yaml 文件添加以下两行,网卡使用ifconfig查看宿主机的网卡名称,我的宿主机的网卡名称是 ens33    

[root@master01 ~]# ifconfig
docker0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 172.17.0.1  netmask 255.255.0.0  broadcast 172.17.255.255
        ether 02:42:7d:18:01:ae  txqueuelen 0  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.31.73  netmask 255.255.255.0  broadcast 192.168.31.255
        inet6 fe80::c8f3:b547:a509:d990  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:d8:0c:67  txqueuelen 1000  (Ethernet)
        RX packets 4740537  bytes 1428558903 (1.3 GiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 4178151  bytes 627478129 (598.4 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0


[root@master01 ~]# vi calico.yaml
# Cluster type to identify the deployment type
- name: CLUSTER_TYPE
  value: "k8s,bgp"
#新增两行配置
- name: IP_AUTODETECTION_METHOD
  value: "interface=ens33"

# Auto-detect the BGP IP address.
- name: IP
  value: "autodetect"
# Enable IPIP
- name: CALICO_IPV4POOL_IPIP
  value: "Always"

再从新执行 kubectl apply -f calico.yaml
 

k8s集群启动成功

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐