RedHat 系列安装 Kubernetes
设置对应主机名
每个节点分别设置对应主机名
主节点hostnamectl set-hostname master从节点hostnamectl set-hostname node1hostnamectl set-hostname node2hostnamectl set-hostname node3修改 hosts
所有节点都修改 hosts
echo "192.168.58.131 master" >> /etc/hostsecho "192.168.58.135 node1" >> /etc/hostsecho "192.168.58.136 node2" >> /etc/hostsecho "192.168.58.137 node3" >> /etc/hosts关闭 SELinux
所有节点关闭 SELinux
setenforce 0sed -i --follow-symlinks 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux添加 k8s 安装源
所有节点
cat <<EOF > kubernetes.repo[kubernetes]name=Kubernetesbaseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64enabled=1gpgcheck=0repo_gpgcheck=0gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpgEOFmv kubernetes.repo /etc/yum.repos.d/CentOS7必备前置:
tc 流量转发控制
sudo yum install -y yum-utils iproute-tcsudo yum update -ysudo yum clean allsudo yum makecache fast安装k8s所需组件
所有节点
v1.23以上版本
yum install -y kubectl kubelet kubeadmoryum install -y kubectlyum install -y kubeletyum install -y kubeadm网络内核模块
tee /etc/modules-load.d/containerd.conf << EOFoverlaybr_netfilterEOFmodprobe overlaymodprobe br_netfilter数据包转发
tee /etc/sysctl.d/kubernetes.conf << EOFnet.bridge.bridge-nf-call-ip6tables = 1net.bridge.bridge-nf-call-iptables = 1net.ipv4.ip_forward = 1EOF重启
sysctl --system生成containerd的默认配置文件
所有节点
containerd config default | tee /etc/containerd/config.tomlsed -i 's#registry.k8s.io/pause:3.6#registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.9#g' /etc/containerd/config.tomlsed -i 's#SystemdCgroup = false#SystemdCgroup = true#g' /etc/containerd/config.toml重启containerd
systemctl restart containerdv1.23以上版本不包含dockershim, 旧版本如下
yum: 使用yum list <pack> --showduplicates查找所有版本
yum list kubectl --showduplicatesyum list kubeadm --showduplicatesyum list kubelet --showduplicates1.24.0版本带containerd
yum install -y kubelet-1.24.0 kubectl-1.24.0 kubeadm-1.24.0 containerd1.22.4版本带docker
yum install -y kubelet-1.22.4 kubectl-1.22.4 kubeadm-1.22.4 docker-ce添加 Docker 安装源
所有节点
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo检查安装
启动
启动kubelet、docker,并设置开机启动(所有节点)
systemctl enable kubelet --nowsystemctl start kubeletsystemctl enable containerd --nowsystemctl start containerd(可选) 如果选择的是Docker
systemctl enable docker --nowsystemctl start docker检查是否加入自启
kubelet
systemctl is-enabled kubelet(可选) Docker
systemctl is-enabled docker查看kubectl版本
kubectl version --client --output=yaml验证kubectl配置
kubectl cluster-info查看kubelet版本
kubelet --version查看kubeadm版本
kubeadm version修改 docker 配置
所有节点都需要 kubernetes 官方推荐 docker 等使用 systemd 作为 cgroupdriver,否则 kubelet 启动不了
cat <<EOF > daemon.json{ "exec-opts": ["native.cgroupdriver=systemd"], "registry-mirrors": ["https://ud6340vz.mirror.aliyuncs.com"]}EOFmv daemon.json /etc/docker/
# 重启生效systemctl daemon-reloadsystemctl restart docker关闭SWAP分区
注释SWAP行
vi /etc/fstab配置k8s配置
主节点配置kube
其他节点需要访问集群,需要从主节点复制这个文件过去其他节点 在其他机器上创建 ~/.kube/config 文件也能通过 kubectl 访问到集群
mkdir -p $HOME/.kubesudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/configsudo chown $(id -u):$(id -g) $HOME/.kube/config初始化集群
根据你的主机类型选择一个方案, 只需要执行其一
不同云厂商的公网IP方案
- 建立虚拟机网卡(所有节点) 添加修改以下网卡配置
cat > /etc/sysconfig/network-scripts/ifcfg-eth0:1 <<EOFBOOTPROTO=staticDEVICE=eth0:1IPADDR=<公网IP>PREFIX=32TYPE=EthernetUSERCTL=noONBOOT=yesEOF(可选) centos8需要重启网络(所有节点)
systemctl restart network- 查看是否生效(所有节点)
ip addr- 修改kubelet启动参数文件(所有节点)
修改kubeadm配置, 替换
<公网IP>为当前节点公网IP
echo >> /usr/lib/systemd/system/kubelet.service.d/10-kubeadm.conf ExecStart=/usr/bin/kubelet $KUBELET_KUBECONFIG_ARGS $KUBELET_CONFIG_ARGS $KUBELET_KUBEADM_ARGS $KUBELET_EXTRA_ARGS --node-ip=<公网IP>- 主节点(master)添加配置文件
内网方案
master主节点用kubeadm初始化
# 初始化集群控制台 Control plane# 失败了可以用 kubeadm reset 重置kubeadm init --image-repository=registry.aliyuncs.com/google_containers(可选) 重新获取token:
kubeadm token create --print-join-command自动补全
yum
yum install bash-completionapt-get
apt-get install bash-completion导入
bash
kubectl completion bashsource ~/.bashrc(异常时) 失败运行:
echo >> ~/.bashrc "source /usr/share/bash-completion/bash_completion"source ~/.bashrc验证
type _init_completion启动 kubectl 自动补全功能
Bash
确保kubectl 补全脚本已经导入(sourced)到 Shell 会话中。 可以通过以下两种方法进行设置:
kubectl completion bash | sudo tee /etc/bash_completion.d/kubectl > /dev/nullsudo chmod a+r /etc/bash_completion.d/kubectl如果 kubectl 有关联的别名,你可以扩展 Shell 补全来适配此别名:
echo 'alias ct=kubectl' >>~/.bashrcecho 'complete -o default -F __start_kubectl ct' >>~/.bashrc重新加载
source ~/.bashrcQ&A
Q: [ERROR FileContent--proc-sys-net-ipv4-ip_forward]: /proc/sys/net/ipv4/ip_forward contents are not set to 1
因为之前初始化过
A: 修改内核
vi /etc/sysctl.conf
net.ipv4.ip_forward = 1重启
sysctl --systemQ: E0419 17:19:24.409506 137577 memcache.go:265] couldn't get current server API group list: Get "http://localhost:8080/api?timeout=32s": dial tcp [::1]:8080: connect: connection refused The connection to the server localhost:8080 was refused - did you specify the right host or port?
A:
mkdir -p $HOME/.kubesudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/configsudo chown $(id -u):$(id -g) $HOME/.kube/configQ:
networkPlugin cni failed to set up pod "test-k8s-68bb74d654-mc6b9_default" network: open /run/flannel/subnet.env: no such file or directory
A:
在每个节点创建文件/run/flannel/subnet.env写入以下内容,配置后等待一会就好了
mkdir /run/flannel/ && echo > "/run/flannel/subnet.env" \"FLANNEL_NETWORK=10.244.0.0/16FLANNEL_SUBNET=10.244.0.1/24FLANNEL_MTU=1450FLANNEL_IPMASQ=true"
