前言

    本文是博主练习时编写的文档,大家也可以参考一下,如有错误请指出,谢谢

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到这就已经安装完了,如有什么问题评论区留言,文章结尾送大家一张壁纸,最后祝大家顺风顺水顺财神,事业有成步步高。

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐