k8s使用kubeadm搭建
环境 | 主机 | 配置 | |
---|---|---|---|
Centos 7.9 | 192.168.11.11 hostname:k8s-master | 4C+4G | |
Centos 7.9 | 192.168.11.12 hostname:k8s-node1 | 4C+4G | |
Centos 7.9 | 192.168.11.13 hostname:k8s-node2 | 4C+4G |
#禁用防火墙
systemctl stop firewalld
systemctl disable firewalld
#禁用selinux
setenforce 0
cat /etc/selinux/config
SELINUX=disabled
#关闭swap分区
swapoff -a
sed -i '/swap/s/^/#/' /etc/fstab
#同步时间
yum install ntpdate
ntpdate ntp1.aliyun.com;hwclock --systohc
#所有服务器需安装docker环境
#所有服务器配置cgroup 驱动
vim /etc/docker/daemon.json
{
"registry-mirrors":
["https://2fweidtv.mirror.aliyuncs.com"],
"insecure-registries": ["192.168.11.14"],
"exec-opts": ["native.cgroupdriver=systemd"]
}
systemctl daemon-reload
systemctl restart docker
vim /etc/sysctl.d/k8s.conf
#追加
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
sysctl -p /etc/sysctl.d/k8s.conf #使其生效
#修改主机名
hostnamectl set-hostname k8s-master
hostnamectl set-hostname k8s-node1
hostnamectl set-hostname k8s-node2
#添加解析
vim /etc/hosts
192.168.11.11 k8s-master
192.168.11.12 k8s-node1
192.168.11.13 k8s-node2
#升级内核版本
rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm
yum --enablerepo=elrepo-kernel install -y kernel-lt
# 重新创建内核配置. 设置开机从新内核启动
grub2-set-default 0
#所有节点重启
reboot
#方法2
#添加阿里源
cat <<EOF > /etc/yum.repos.d/elrepo.repo
[elrepo]
name=elrepo
baseurl=https://mirrors.aliyun.com/elrepo/archive/kernel/el7/x86_64
gpgcheck=0
enabled=1
EOF
#重建yum缓存
yum clean all && yum makecache
#安装内核
yum install -y kernel-lt kernel-lt-devel
#查看启动内核
cat /etc/grub2.cfg | grep menuentry|awk -F "\'" '$1=="menuentry " {print i++ " : " $2}'
#设置启动内核
grub2-set-default 0
#
reboot
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
cat > /etc/yum.repos.d/kubernetes.repo <<EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=0
EOF
#安装 Kubelet、Kubeadm 和 Kubectl (所有主机)
# 搜索 kubeadm 版本
yum list kubeadm --showduplicates | sort -r
#安装
yum install -y kubelet-1.20.9 kubeadm-1.20.9 kubectl-1.20.9
# Kubelet 设置开机启动
systemctl enable kubelet
# kubelet 刚安装完成后,通过 systemctl start kubelet 方式是无法启动的,需要加入节点或初始化为 master 后才可启动成功
#master节点生成初始化配置文件(只在master执行)
kubeadm config print init-defaults > init-config.yaml
vim init-config.yaml
10 kind: InitConfiguration #功能块类型 用于定义初始化配置,如初始化使用的 token 以及 apiserver 等。
12 advertiseAddress: 192.168.11.11 #master 节点IP 地址
16 name: k8s-master #如果使用域名保证可以解析,或直接使用 IP 地址
31 dataDir: /var/lib/etcd #etcd 容器挂载到本地的目录
32 imageRepository: registry.aliyuncs.com/google_containers #修改为国内地址
33 kind: ClusterConfiguration #用于定义 apiserver 、 etcd 、 network 、 scheduler 、controller-manager 等 master 组件相关配置项。
37 serviceSubnet: 10.96.0.0/12
38 podSubnet: 10.244.0.0/16 #在这里添加这行,为flannel 作为 Pod 的网络插件
39 scheduler: {}
#查看所需镜像
kubeadm config images list --config init-config.yaml
#拉取镜像
kubeadm config images pull --config init-config.yaml
#可以查看下载的镜像
docker images
#进行集群初始化
kubeadm init --config init-config.yaml
#成功初始化的输出为:
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
#执行提示的命令
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
export KUBECONFIG=/etc/kubernetes/admin.conf
#生成新的token 并把node加入到集群中
kubeadm token create --print-join-command
kubeadm join 192.168.11.11:6443 --token yka5es.eqbjr612pzcgvt6h --discovery-token-ca-cert-hash sha256:3a0c48b6949a4b0ae528b4afbc9b78976c3c49eb14d4c1557342acda673918de
#在node1 node2执行(如果加入集群卡顿,就重新生成token再加入)
kubeadm join 192.168.11.11:6443 --token yka5es.eqbjr612pzcgvt6h --discovery-token-ca-cert-hash sha256:3a0c48b6949a4b0ae528b4afbc9b78976c3c49eb14d4c1557342acda673918de
#加入集群成功后master执行
kubectl get nodes
#Kubectl 命令提供了自动补全功能,需要手动安装这个功能
source <(kubectl completion bash)
echo "source <(kubectl completion bash)" >> ~/.bashrc
#如遇到kubectl get pod-bash: _get_comp_words_by_ref: 未找到命令
yum -y install bash-completion
source /usr/share/bash-completion/bash_completion
echo 'source <(kubectl completion bash)' >> ~/.bashrc
#安装flannel网络插件
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
#此处需科学上网可下载镜像可直接导入镜像并修改
vim kube-flannel.yml
image: quay.io/coreos/flannel:v0.14.0
kubectl apply -f kube-flannel.yml
kubectl get pod -n kube-system #查看状态
kubectl get nodes #查看集群状态
#如果coredns一直处于pending状态
journalctl -u kubelet -f #查询日志
[failed to find plugin "flannel" in path [/opt/cni/bin]]
4月 16 15:58:37 k8s-master kubelet[3468]: W0416 15:58:37.505920 3468 cni.go:239] Unable to update cni config: no valid networks found in /etc/t.d
解决方案:
https://github.com/containernetworking/plugins/releases/tag/v0.8.6
#github下载此包
tar zxvf cni-plugins-linux-amd64-v0.8.6.tgz
#所有节点都需要复制
cp flannel /opt/cni/bin/
kubectl get nodes 查看已恢复