Skip to content

使用kubeadm快速搭建K8S

1、基本环境centos7

systemctl stop firewalld && systemctl disable firewalld
sed -i 's/enforcing/disabled/g' /etc/selinux/config; setenforce 0
#安装必要的一些系统工具
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
#添加开机启动
sudo systemctl enable docker.service
#启动docker
sudo systemctl start docker.service
#配置镜像加速
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://k0nmuuug.mirror.aliyuncs.com"],
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  },
  "storage-driver": "overlay2",
  "storage-opts": [
    "overlay2.override_kernel_check=true"
  ]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
docker run hello-world
#配置内核参数
cat <<EOF >  /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system
sysctl -p /etc/sysctl.conf
swapoff -a   #关闭swap
sed -ri 's/.*swap.*/#&/' /etc/fstab  #永久关闭swap
#重启
reboot
  • (可选)kubernetes ipvs模式,默认为iptables模式
#开启内核参数
cat >> /etc/sysctl.conf << EOF
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
EOF

sysctl -p
#开启ipvs 支持
yum -y install ipvsadm  ipset

# 临时生效
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack_ipv4
# 永久生效
cat > /etc/sysconfig/modules/ipvs.modules <<EOF
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack
EOF
chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack_ipv4
#修改配置文件kube-proxy.service,添加配置
--proxy-mode=ipvs \
--masquerade-all=true
#或者修改配置文件kube-proxy的configmap
kubectl edit configmap kube-proxy -n kube-system
-----
kind: KubeProxyConfiguration
metricsBindAddress: ""
mode: "ipvs" #修改此处,原为空
nodePortAddresses: null
-----
#重启kube-proxy
kubectl rollout restart daemonset kube-proxy -n kube-system

journalctl -u kube-proxy 
#查看启动日志
#显示server_others.go:189] Using ipvs Proxier. 

#表示启用ipvs
#通过ipvsadm -Ln 查看是否生效

参考:https://www.jianshu.com/p/31b161b99dc6

2、安装k8s组件

#添加kubernetes源
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
#安装kubelet kubeadm kubectl
yum install -y kubelet-1.22.8 kubeadm-1.22.8 kubectl-1.22.8
#每个节点的hostname在/etc/hosts配置一下解析地址

3、master节点初始化

kubeadm init --kubernetes-version=v1.22.8 --image-repository=registry.aliyuncs.com/google_containers --pod-network-cidr=10.244.0.0/16
systemctl enable kubelet.service
systemctl start kubelet.service

–pod-network-cidr:选择一个 Pod 网络插件,并检查是否在 kubeadm 初始化过程中需要传入什么参数。这个取决于您选择的网络插件,您可能需要设置 --Pod-network-cidr 来指定网络驱动的CIDR。Kubernetes 支持多种网络方案,而且不同网络方案对 --pod-network-cidr有自己的要求,flannel设置为 10.244.0.0/16,calico设置为192.168.0.0/16

–image-repository:Kubenetes默认Registries地址是k8s.gcr.io,国内无法访问,在1.13版本后可以增加–image-repository参数,将其指定为可访问的镜像地址,这里使用registry.aliyuncs.com/google_containers。

配置 kubectl

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

4、node节点加入

执行master上的命令

kubeadm join 192.168.0.104:6443 --token 4ual51.gbgeu5r5ujfj17mr \
    --discovery-token-ca-cert-hash sha256:14c2a981f770ec06c8ee68cb00b15ac0a799b89d1ddbca33b98da5e8d199b5c9

k8s集群新增master\node节点重新生成token

拷贝/etc/kubernetes/admin.conf到node节点下,实现在node节点使用k8s命令

scp /etc/kubernetes/admin.conf node1:/etc/kubernetes/
scp /etc/kubernetes/admin.conf node2:/etc/kubernetes/

每个节点都写到环境变量

echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile
source ~/.bash_profile

5、安装网络插件

kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
#或者
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
  • 报错:The connection to the server raw.githubusercontent.com was refused - did you specify the right host or port?

原因:外网不可访问

解决办法:

```bash # 在https://www.ipaddress.com/查询raw.githubusercontent.com的真实IP。

sudo vim /etc/hosts 199.232.28.133 raw.githubusercontent.com ```

允许master节点调度

kubectl taint nodes --all node-role.kubernetes.io/master-

查看master节点状态为Ready

kubectl get nodes
kubectl get pods -n kube-system 

至此,Kubernetes 的 Master 节点就部署完成了。如果只需要一个单节点的 Kubernetes,现在你就可以使用了。

部署参考:https://blog.csdn.net/networken/article/details/84991940

6、K8S环境清理

kubeadm reset -f
modprobe -r ipip
rm -rf ~/.kube/
rm -rf /etc/kubernetes/
rm -rf /etc/cni
rm -rf /opt/cni
rm -rf /var/lib/etcd
rm -rf /var/etcd
yum clean all
yum -y remove kube*