# 第三模块 安装Kubernetes
# 安装选项
- kubeadm 推荐 kubeadm kubelet kubectl (本节安装)
- minicube 单机版 验证功能
- k3s (opens new window)
# 基础软件安装
- 虚拟机 VMware Fusion 22H2 for Mac
- CentOS Minimal 版
- http://mirrors.aliyun.com/centos/7.9.2009/isos/x86_64/CentOS-7-x86_64-Minimal-2009.iso
- 修改CentOS⽹络配置、SSH登录
# 编辑配置
vi /etc/sysconfig/network-scripts/ifcfg-ens33
ONBOOT=no 改为yes
# 重启服务
systemctl restart network
# 查看ip地址
ip addr
# 设置iptables
iptables -P FORWARD ACCEPT
# ssh登录
ssh root@`ip`
⼩技巧:VMware Fusion安装CentOS时可以做好克隆和快照,⽤SSH登录时可以复制粘贴
# 节点规划
部署k8s集群分2类角色:
- master,虚拟机可配置 4核 4096m
- slave,虚拟机可配置 1核 1024m
主机名 | 节点IP | 角色 | 部署组件 |
---|---|---|---|
k8s-master | 192.168.75.129 | master | etcd, kube-apiserver, kube-controller-manager, kubectl, kubeadm, kubelet, kube-proxy,calico |
k8s-slave1 | 192.168.75.130 | slave | kubectl, kubelet, kube-proxy, calico |
k8s-slave2 | -- | slave | kubectl, kubelet, kube-proxy, calico |
# 安装前准备
操作节点:所有节点(k8s-master,k8s-slave)
均需执行
- 修改hostname
# 在master节点
hostnamectl set-hostname k8s-master
# 在slave-1节点
hostnamectl set-hostname k8s-slave1
# 在slave-3节点
hostnamectl set-hostname k8s-slave3
- 设置hosts解析
cat >>/etc/hosts<<EOF
192.168.75.129 k8s-master
192.168.75.130 k8s-slave1
EOF
# 调整系统配置
操作节点:所有节点(k8s-master,k8s-slave)
均需执行
- 设置iptables
iptables -P FORWARD ACCEPT
- 关闭swap
swapoff -a
# 防止开机自动挂载 swap 分区
sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
- 关闭selinux和防火墙
sed -ri 's#(SELINUX=).*#\1disabled#' /etc/selinux/config
setenforce 0
systemctl disable firewalld && systemctl stop firewalld
- 修改内核参数
cat <<EOF > /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward=1
vm.max_map_count=262144
EOF
modprobe br_netfilter
sysctl -p /etc/sysctl.d/k8s.conf
- 设置yum源(x86_64)
curl -o /etc/yum.repos.d/Centos-7.repo http://mirrors.aliyun.com/repo/Centos-7.repo
curl -o /etc/yum.repos.d/docker-ce.repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
cat <<EOF > /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
EOF
yum clean all && yum makecache
# 安装Docker
操作节点:所有节点(k8s-master,k8s-slave)
均需执行
# 安装最新版
yum install docker-ce-20.10.12 -y
# 配置docker加速、驱动
mkdir -p /etc/docker
cat <<EOF > /etc/docker/daemon.json
{
"insecure-registries": [
"192.168.75.129:5000"
],
"registry-mirrors" : [
"https://8xpk5wnt.mirror.aliyuncs.com"
],
"exec-opts": ["native.cgroupdriver=systemd"]
}
EOF
# 启动docker
systemctl enable docker && systemctl start docker
# 安装集群
# 安装 kubeadm, kubelet 和 kubectl
操作节点:所有节点(k8s-master,k8s-slave)
均需执行
# 安装 kubeadm, kubelet 和 kubectl
yum install -y kubelet-1.21.5 kubeadm-1.21.5 kubectl-1.21.5 --disableexcludes=kubernetes
# 查看kubeadm 版本
kubeadm version
# 设置kubelet开机启动
systemctl enable kubelet
# 初始化配置文件
操作节点: 只在master节点(k8s-master)
执行
kubeadm config print init-defaults > kubeadm.yaml
vim kubeadm.yaml # 可以按照以下图示需改对应配置
# 提前下载镜像
操作节点: 只在master节点(k8s-master)
执行
# 查看需要使用的镜像列表,若无问题,将得到如下列表
kubeadm config images list --config kubeadm.yaml
# 提前下载镜像到本地
kubeadm config images pull --config kubeadm.yaml
# 初始化mater节点
操作节点: 只在master节点(k8s-master)
执行
kubeadm init --config kubeadm.yaml
根据执行成功后消息提醒执行相应操作
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
此时使用 kubectl get nodes查看节点应该处于notReady状态,因为还未配置网络插件 若执行初始化过程中出错,根据错误信息调整后,执行kubeadm reset后再次执行init操作即可
添加slave节点到集群中
# master 节点
kubeadm token create --print-join-command
# 对应slave节点执行即可
kubeadm join 192.168.75.129:6443 --token abcdef.0123456789abcdef \
--discovery-token-ca-cert-hash sha256:252f9c3efada253fcdefe22fa1289d31adaeba2a6f7f790f6c37e9d102e3fa28
# 设置kubectl自动补全
操作节点: 只在master节点(k8s-master)
执行
yum install bash-completion -y
source /usr/share/bash-completion/bash_completion
source <(kubectl completion bash)
echo "source <(kubectl completion bash)" >> ~/.bashrc
# 设置master节点是否可调度(可选)
操作节点: 只在master节点(k8s-master)
执行
默认部署成功后,master节点无法调度业务pod,如需设置master节点也可以参与pod的调度,需执行:
kubectl taint node k8s-master node-role.kubernetes.io/master:NoSchedule-
# 网络插件(选项1)
操作节点: 只在master节点(k8s-master)
执行
# 下载
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
# 先拉取镜像,此过程国内速度比较慢
$ docker pull rancher/mirrored-flannelcni-flannel:v0.20.1
# 执行flannel安装
$ kubectl apply -f kube-flannel.yml
# 网络插件(选项2)
操作节点: 只在master节点(k8s-master)
执行
# 下载
wget https://docs.projectcalico.org/v3.20/manifests/calico.yaml --no-check-certificate
# 执行
kubectl apply -f calico.yaml
# 验证集群
操作节点: 只在master节点(k8s-master)
执行
# 观察集群节点是否全部Ready
kubectl get nodes
# 创建测试nginx服务
kubectl run test-nginx --image=nginx:alpine
# 查看pod是否创建成功,并访问pod ip测试是否可用
kubectl get po -o wide
# 集群清理
如果集群安装过程中遇到了其他问题,使用下面的命令来进行重置
kubeadm reset
ifconfig cni0 down && ip link delete cni0
ifconfig flannel.1 down && ip link delete flannel.1
rm -rf /run/flannel/subnet.env
rm -rf /var/lib/cni/
mv /etc/kubernetes/ /tmp
mv /var/lib/etcd /tmp
mv ~/.kube /tmp
iptables -F
iptables -t nat -F
ipvsadm -C
ip link del kube-ipvs0
ip link del dummy0
# 安装k8s遇到的问题
kubeadm初始化失败
- 内核和内存太少,更改为 4和4096
kubeadm jon 卡住
- https://blog.csdn.net/qq_46595591/article/details/107584320
docker cgroupfs systemd
- https://blog.csdn.net/hackermmm/article/details/110239684
K8S==policy/v1beta1 PodSecurityPolicy is deprecated in v1.21+, unavailable in v1.25+
- https://blog.csdn.net/hebian1994/article/details/121936540
# Mac M芯片 汇总
- 设置yum源(aarch64)
curl -o /etc/yum.repos.d/Centos-7.repo http://mirrors.aliyun.com/repo/Centos-7.repo
curl -o /etc/yum.repos.d/docker-ce.repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
cat > /etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-aarch64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
yum clean all && yum makecache