Kubernetes集群部署
Master&noed节点的配置
参考链接: https://blog.csdn.net/cyfblog/article/details/108077248
安装准备
#网络通信
节点网络:
1.master 192.168.10.31
2.node1 192.168.10.41
3.node2 192.168.10.51
pod网络 :10.244.0.0/16
service网络 :1.96.0.0/12
#ssh免密登录配置
安装sshpass
sudo apt update
sudo apt install sshpass
允许root用户远程登录
修改ssh服务配置文件
sudo vim /etc/ssh/sshd_config
调整PermitRootLogin参数值为yes
配置ssh秘钥登录
脚本如下:
#!/bin/bash
ssh-keygen -f /root/.ssh/id_rsa -P ''
NET=192.168.10
export SSHPASS=123456
for IP in 31 41 51
do
sshpass -e ssh-copy-id -f root@$NET.$IP -o StrictHostKeyChecking=no
done
写入配置文件
/home/sbw/.ssh/config
Host 31
HostName 192.168.10.31
User root
Port 22
IdentityFile yes
Host 41
HostName 192.168.10.41
User root
Port 22
IdentityFile yes
Host 51
HostName 192.168.10.51
User root
Port 22
IdentityFile yes
#配置/etc/hosts解析(所有节点)
echo "
192.168.10.31 master
192.168.10.41 node1
192.168.10.51 node2
" >> /etc/hosts
#系统时间配置
#下载ntp时间服务
root@master:~# apt install -y ntpdate
#校验系统时间
root@master:~# ntpdate -u ntp.api.bz / ntpdate ntp1.aliyun.com
#关闭防火墙
root@master:~# systemctl disable ufw
root@master:~# ufw disable
#防火墙在系统启动时自动禁用
#关闭SELinux
root@master:~# setenforce 0 && sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
#关闭swap
注释/etc/fstab文件中swap行
root@master:~# swapoff -a && sed -i '/swap/s/^/#/' /etc/fstab
root@master:~# free -m
总计 已用 空闲 共享 缓冲/缓存 可用
内存: 3936 394 1854 7 1686 3302
交换: 0 0 0
#配置系统参数
在没有配置系统参数的时候,kubeadm init初始化时会产生如下错误
[ERROR FileContent--proc-sys-net-bridge-bridge-nf-call-iptables]: /proc/sys/net/bridge/bridge-nf-call-iptables does not exist
[ERROR FileContent--proc-sys-net-ipv4-ip_forward]: /proc/sys/net/ipv4/ip_forward contents are not set to 1
[ERROR Swap]: running with swap on is not supported. Please disable swap
通过配置如下参数,避免上面产生的错误
root@master:~# cat > /etc/sysctl.d/k8s.conf <<EOF
# 必选
>net.bridge.bridge-nf-call-ip6tables=1
>net.bridge.bridge-nf-call-iptables=1
>net.ipv4.ip_forward=1
>vm.swappiness=0 #禁止启用swap空间,只有当系统OOM时才使用它
# 可选
>net.ipv6.conf.all.disable_ipv6=1 # 禁用ipv6
>vm.overcommit_memory=1 # 不检查物理内存是否够用
>vm.panic_on_oom=0 # 开启OOM
>fs.inotify.max_user_instances=8192
>fs.inotify.max_user_watches=1048576
>fs.file-max=52706963
>fs.nr_open=52706963
>EOF
#执行命令使修改生效
root@master:~# modprobe br_netfilter
root@master:~# sysctl -p /etc/sysctl.conf/k8s.conf
#配置kube-proxy开启ipvs的前置条件
kube-proxy开启ipvs的前提条件,由于ipvs已经加入到了内核的主干,kube-proxy代理模式使用ipvs转发,则需要配置ipvs模块:
在每个节点上安装ipvs,加载相关系统模块
root@master:~# mkdir -p /etc/sysconfig/modules && 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
// 执行脚本
root@master:~# chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack
上面脚本创建了/etc/sysconfig/modules/ipvs.modules文件,保证在节点重启后能自动加载所需模块。 使用lsmod | grep -e ip_vs -e nf_conntrack_ipv4命令查看是否已经正确加载所需的内核模块。 接下来还需要确保各个节点上已经安装了ipset软件包。 为了便于查看ipvs的代理规则,最好安装一下管理工具ipvsadm。
root@master:~# apt-get update && apt-get install ipset ipvsadm -y
安装kubeadm、kubelet、kubectl、docker
配置kubernetes.repo的源
root@master:~# apt-get update && apt-get install -y apt-transport-https
root@master:~# curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add -
root@master:~# cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
>deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
>EOF
更新 apt 包索引
root@master:~# apt-get update
所有master节点按如下方式安装
root@master:~# apt-get install -y kubelet kubeadm kubectl docker-ce docker-ce-cli
所有node节点按如下方式安装
root@master:~# apt-get install -y kubelet kubeadm docker-ce docker-ce-cli
配置 kubelet、docker 开机自启
root@master:~# systemctl enable docker && systemctl start docker
root@master:~# systemctl restart kubelet && systemctl start kubelet
配置Master
修改 kube-proxy 的配置,明确使用 ipvs 方式
kubectl edit cm kube-proxy -n kube-system
ipvs:
excludeCIDRs: null
minSyncPeriod: 0s
scheduler: ""
strictAPP: false
syncPeriod: 0s
tcpFinTimeout: 0s
tcpTimeout: 0s
udpTimeout: 0s
kind: KubeProxyConfiguration
metricsBindAddress: ""
mode:"ipvs"
初始化
root@master:~# kubeadm init \
--apiserver-advertise-address=192.168.10.31 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.19.4 \
--pod-network-cidr=10.244.0.0/16 \
--service-cidr 10.96.0.0/12 \
初始化完成
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
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/
Then you can join any number of worker nodes by running the following on each as root:
kubeadm join 192.168.10.31:6443 --token cv7gff.dywq4vepeyny2xpw \
--discovery-token-ca-cert-hash sha256:8dd5a22f053c0d1d847f870f8833b2d26048b3416bfd585fe247e0813df868b3
master节点配置config
root@master:~# mkdir -p $HOME/.kube
root@master:~# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
root@master:~# sudo chown $(id -u):$(id -g) $HOME/.kube/config
如果加入集群命令丢失,可通过如下命令找回
root@master:~# kubeadm token create --print-join-command
部署网络插件Flannel
root@master:~# kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
root@master:~# kubectl apply -f kube-flannel.yml #执行flannel.yml文件
配置node节点
加入集群
root@master:~# kubeadm join 192.168.10.31:6443 --token cv7gff.dywq4vepeyny2xpw \
> --discovery-token-ca-cert-hash sha256:8dd5a22f053c0d1d847f870f8833b2d26048b3416bfd585fe247e0813df868b3