前言
本文是博主练习时编写的文档,大家也可以参考一下,如有错误请指出,谢谢
1、服务器分配
-
k8s-master : 192.168.168.30
-
k8s-node1: 192.168.168.111
-
k8s-node2: 192.168.168.94
2、初始化配置
-
在所有节点上面操作
2.1、关闭防火墙
systemctl stop firewalld # 关闭防火墙
systemctl disable firewalld # 关闭开机启动防火墙
2.2、关闭selinux
setenforce 0 # 临时关闭
sed -i 's/enforcing/disabled/' /etc/selinux/config # 永久关闭selinux
2.3、关闭swap
swapoff -a #临时关闭
sed -ri 's/.*swap.*/#&/' /etc/fstab # 永久关闭swap
2.4、修改主机名
-
以下命令分别在对应服务器执行
hostnamectl set-hostname k8s-master
hostnamectl set-hostname k8s-node1
hostnamectl set-hostname k8s-node2
2.5、添加host解析
cat >> /etc/hosts << EOF
192.168.168.30 k8s-master
192.168.168.111 k8s-node01
192.168.168.94 k8s-node02
EOF
2.6、将桥接的IPV4流量传递到iptables的链
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
EOF
加载br_netfilter模块
modprobe br_netfilter
# 查看是否加载
lsmod | grep br_netfilter
# 生效
sysctl --system
2.7、时间同步
yum -y install ntpdate
ntpdate ntp2.aliyun.com
2.8、开启ipvs
yum -y install ipset ipvsadm
-
执行以下脚本:
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_ipv4
EOF
-
授权、运行、检查是否加载
# 授权
chmod 755 /etc/sysconfig/modules/ipvs.modules
# 运行
bash /etc/sysconfig/modules/ipvs.modules
# 检查是否加载
lsmod | grep -e ip_vs -e nf_conntrack_ipv4
# 注:本命令为上面三条命令结合,执行过上面三条命令之后无需执行本命令
# 一键执行命令
chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack_ipv4
3、安装
docker/kubeadm/kubelet/kubectl
注:所有节点都需要操作
3.1、安装docker
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
yum -y install docker-ce-18.06.3.ce-3.el7
systemctl enable docker && systemctl start docker
docker version
-
设置docker镜像源
mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"exec-opts": ["native.cgroupdriver=systemd"],
"registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"]
}
EOF
systemctl daemon-reload # 重新加载
systemctl restart docker
3.2、添加阿里云的yum镜像源
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
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
3.3、安装kubeadm、kubelet和kubectl
-
由于版本更新频繁,这里指定版本号部署
yum -y install kubelet-1.23.6 kubeadm-1.23.6 kubectl-1.23.6
-
为了实现docker使用的cgroup drvier和kubelet使用的cgroup driver一致,建议修改"/etc/sysconfig/kubelet"文件内容
vim /etc/sysconfig/kubelet
# 修改
KUBELET_EXTRA_ARGS="--cgroup-driver=systemd"
-
设置为开机自启动即可,由于没有生成配置文件,集群初始化后自动启动
systemctl enable kubelet
3.4、部署k8s的master节点
-
部署k8s的master节点(192.168.168.30)
-
初始化master节点
# 由于默认拉去镜像地址k8s.gcr.io国内无法访问,这里需要更改为阿里云镜像仓库地址
kubeadm init \
--apiserver-advertise-address=192.168.168.30 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.23.6 \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=10.244.0.0/16
-
出现successfully后,根据提示信息执行以下命令:
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
3.5、添加k8s 的 node节点
-
在192.168.168.111和192.168.168.94上添加以下命令
# 此命令为初始化master 节点后最下面一行显示的命令,如果清除屏幕则需要重新获取
kubeadm join 192.168.168.30:6443 --token 2rp5wo.0fj3f6yltqtvvlsm \
--discovery-token-ca-cert-hash sha256:138cab8cc90e0cc14fcf0a3602601ea1751c8ac01a276b0283a392a4657ccad8
### 忘记token和证书哈希值执行以下命令重新获取token和证书
# 查看token列表
kubeadm token list
# 查看证书哈希值
openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'
# 使node加入集群
kubeadm join <masterIP>:6443 --token <Token> --discovery-token-ca-cert-hash sha256:<证书hash值>
-
默认的token有效期为24小时,当过期后,该token就不能使用了,这时可以使用以下命令创建token
kubeadm token create --print-join-command
# 生成一个永不过期的token
kubeadm token create --ttl 0
3.6、部署CNI网络插件
-
-
-
calico 网络组件
-
-
-
上面部署完后用命令查看
kubectl get nodes
kubectl get cs
kubectl get pods -n kube-system
# 查看发现coredns 状态为 pending 状态需要安装CNI网络插件
-
下载calico.yaml配置文件
wget https://calico-v3-25.netlify.app/archive/v3.25/manifests/calico.yaml
# 修改calico.yaml
# 修改calico.yaml 文件中的 CALICO_IPV4POOL_CIDR 配置,修改为与初始化的cidr相同
- name: CALICO_IPV4POOL_CIDR
value: "10.244.0.0/16"
-
删除docker.io/前缀,避免下载过慢导致失败
sed -i 's#docker.io/##g' calico.yaml
-
重新构建
kubectl apply -f calico.yaml
# 查看是否构建成功
kubectl get po -n kube-system
# 查看是否有虚拟网卡
ip link
### 如果没有构建成功则需要查看日志
kubectl describe po {容器名称} -n kube-system
-
创建容器测试
# 创建一个nginx容器
kubectl create deployment nginx --image=nginx
# 映射内部端口80
kubectl expose deployment nginx --port=80 --type=NodePort
# 查看映射的外部端口
kubectl get pod,svc
curl 192.168.168.30:30575 # 后面跟物理IP加映射端口
-
查看集群健康状态
kubectl get cs
kubectl cluster-info
3.7、在任意节点使用kubectl命令
# 将master节点中 "/etc/kubernetes/admin.conf" 拷贝到需要运行的服务器"/etc/kubernetes"
scp /etc/kubernetes/admin.conf root@k8s-node01:/etc/kubernetes/
scp /etc/kubernetes/admin.conf root@k8s-node02:/etc/kubernetes/
# 在对应的服务器上配置环境变量
echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile
source ~/.bash_profile
# 测试
kubectl get cs
结尾
好了,kubeadm部署k8s到这就已经安装完了,如有什么问题评论区留言,文章结尾送大家一张壁纸,最后祝大家顺风顺水顺财神,事业有成步步高。