侧边栏壁纸
  • 累计撰写 32 篇文章
  • 累计创建 55 个标签
  • 累计收到 2 条评论

目 录CONTENT

文章目录

k8s集群搭建:集群安装和安装

Testerfans
2022-08-25 / 0 评论 / 22 点赞 / 3,296 阅读 / 1,885 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2022-09-13,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

前言

前面两篇我们已经安装配置好了集群的服务器环境,接下来我们正式的开始安装和部署k8s集群,我们按照上一篇规划的软件版本进行部署。

k8s集群的安装目前官方推荐的有3种,分别为kubeadm、Kops、Kubespray,我们这里选择kubeadm方式。

K8s集群规划

部署架构图

软件规划

软件名 版本 作用
操作系统 CentOS 7.9_x86_64 minimal 虚拟机安装的操作系统版本
Docker 20-CE 容器运行时环境,我们演示使用Docker(满足CRI标准接口的容器运行时均可)
Kubernetes 1.23 K8s版本,这里演示使用1.23,目前最新1.25,从官网可见

系统配置及集群安装

在所有node节点进行如下配置,包括:master和node1/node2。

系统配置 [所有节点]

# 第一步:关闭防火墙【已执行】
# 关闭原因:iptables防火墙会对网络流量进行过滤、转发,如果是内网集群一般都进行关闭,防止影响网络性能。
systemctl stop firewalld
systemctl disable firewalld

# 禁用SELinux或者用setenforce 0指令将SELinux设置为许可模式,先临时关闭,并配置永久关闭。
# 关闭原因:linux增加安全组件,很多组件不兼容。另外容器访问主机系统也必须关闭SELinux。
setenforce 0  # 临时
sed -i 's/enforcing/disabled/' /etc/selinux/config  # 永久

# 关闭swap。先临时关闭,并配置永久关闭。
# 关闭原因:内存不足时,Linux会自动使用swap,降低性能,并且无法感知容器OOM。
swapoff -a  # 临时
sed -ri 's/.*swap.*/#&/' /etc/fstab # 永久

# 在master添加hosts,这里注意修改成自己设置的ip和主机名 [ip] [主机名]
cat >> /etc/hosts << EOF
192.168.4.100 k8s-master
192.168.4.101 k8s-node1
192.168.4.102 k8s-node2
EOF

# 将桥接的IPv4流量传递到iptables的链
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
# 确认是否生效
sysctl --system  
# 时间同步,确保各个节点时间同步
yum install ntpdate -y
ntpdate time.windows.com

安装docker [所有节点]

# 安装wget工具
yum -y install wget
# 下载并安装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
systemctl enable docker && systemctl start docker
# 配置镜像加速
cat > /etc/docker/daemon.json << EOF
{
  "registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"],
  "exec-opts": ["native.cgroupdriver=systemd"]
}
EOF
# 重启docker并查看docker info
systemctl restart docker
docker info
# docker安装完成后默认会给安装br_netfilter和overlay内核模块,这两个模块是k8s集群必须的两个内核模块
lsmod | grep br_netfilter
lsmod | grep overlay

添加阿里云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

安装kubeadm,kubelet和kubectl [所有节点]

yum install -y kubelet-1.23.0 kubeadm-1.23.0 kubectl-1.23.0
systemctl enable kubelet

部署Kubernetes Master

1、按照规划我们在k8s-master节点上执行如下命令。

kubeadm init \
  --apiserver-advertise-address=192.168.4.100 \
  --image-repository registry.aliyuncs.com/google_containers \
  --kubernetes-version v1.23.0 \
  --service-cidr=10.96.0.0/12 \
  --pod-network-cidr=10.244.0.0/16 \
  --ignore-preflight-errors=all

• --apiserver-advertise-address 集群通告地址
• --image-repository 由于默认拉取镜像地址k8s.gcr.io国内无法访问,这里指定阿里云镜像仓库地址
• --kubernetes-version K8s版本,与上面安装的一致
• --service-cidr 集群内部虚拟网络,Pod统一访问入口
• --pod-network-cidr Pod网络,与下面部署的CNI网络组件yaml中保持一致

注意📢:初始化完成后,最后会输出一个join命令,拷贝下来,后续会用到。

kubeadm join 192.168.4.100:6443 --token opktqp.uwlxgl62iwj6k046 \
        --discovery-token-ca-cert-hash sha256:6a482b3fa0bcd60c150fe5739a6f41f30a304bf5ceee6674c2d58358c17fef8e 

2、拷贝kubectl使用的连接k8s认证文件到默认路径,在master节点作为kuectl的管理节点。

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

3、使用kubectl get nodes查看工作节点。

[root@k8s-master ~]# kubectl get nodes
NAME         STATUS     ROLES                  AGE     VERSION
k8s-master   NotReady   control-plane,master   5m36s   v1.23.0

注意📢:由于网络插件还没有部署,还没有准备就绪 NotReady,我们先继续往下部署。

4、在worker node1和node2执行步骤2输出的kubeadm join指令,将node1和node2加入到集群管理。

kubeadm join 192.168.4.100:6443 --token opktqp.uwlxgl62iwj6k046 \
        --discovery-token-ca-cert-hash sha256:6a482b3fa0bcd60c150fe5739a6f41f30a304bf5ceee6674c2d58358c17fef8e 

此时我们在master节点通过kubectl get nodes命令查看集群节点,发现增加了node1和node2节点。

[root@k8s-master ~]# kubectl get nodes
NAME         STATUS     ROLES                  AGE   VERSION
k8s-master   NotReady   control-plane,master   12m   v1.23.0
k8s-node1    NotReady   <none>                 21s   v1.23.0
k8s-node2    NotReady   <none>                 14s   v1.23.0

注意📢:kubeadm join 默认token有效期为24小时

kubeadm join 192.168.4.100:6443 --token opktqp.uwlxgl62iwj6k046 \
        --discovery-token-ca-cert-hash sha256:6a482b3fa0bcd60c150fe5739a6f41f30a304bf5ceee6674c2d58358c17fef8e 

当过期之后需要重新创建token,可以直接使用命令快捷生成:

kubeadm token create --print-join-command

部署容器网络(CNI) [master节点]

Calico是一个纯三层的数据中心网络方案,是目前Kubernetes主流的网络方案。

1、下载calico yaml文件。

wget https://docs.projectcalico.org/manifests/calico.yaml --no-check-certificate

2、下载完后修改里面定义Pod网络(CALICO_IPV4POOL_CIDR)。

# 打开calico.yaml文件找到CALICO_IPV4POOL_CIDR
# 修改value与前面kubeadm init的--pod-network-cidr=10.244.0.0/16保持一致
- name: CALICO_IPV4POOL_CIDR
value: "10.244.0.0/16"

3、对calico.yaml进行部署。

kubectl apply -f calico.yaml
kubectl get pods -n kube-system

4、确认所有的calico pod都运行起来了(因为涉及到镜像拉取和容器启动,会比较慢,需要等待)。

[root@k8s-master ~]# kubectl get pods -n kube-system
NAME                                       READY   STATUS     RESTARTS   AGE
calico-kube-controllers-67c466d997-nm9vj   1/1     Running    0          4m44s
calico-node-4xp5k                          1/1     Running    0          4m44s
calico-node-cw6cf                          0/1     Init:0/3   0          4m44s
calico-node-tzkf8                          1/1     Running    0          4m44s
coredns-6d8c4cb4d-t4l7t                    1/1     Running    0          28m
coredns-6d8c4cb4d-x2mbl                    1/1     Running    0          28m
etcd-k8s-master                            1/1     Running    0          31m
kube-apiserver-k8s-master                  1/1     Running    0          31m
kube-controller-manager-k8s-master         1/1     Running    0          31m
kube-proxy-8jxkd                           1/1     Running    0          18m
kube-proxy-9cb2j                           1/1     Running    0          28m
kube-proxy-s9hg8                           1/1     Running    0          18m
kube-scheduler-k8s-master                  1/1     Running    0          31m

5、确认所有的nodes状态为ready状态。

[root@k8s-master ~]# kubectl get nodes
NAME         STATUS   ROLES                  AGE   VERSION
k8s-master   Ready    control-plane,master   36m   v1.23.0
k8s-node1    Ready    <none>                 23m   v1.23.0
k8s-node2    Ready    <none>                 23m   v1.23.0

注意📢:k8s的安装目录和组件配置文件目录在如下两个位置。

安装目录:/etc/kubernetes/

组件配置文件目录:/etc/kubernetes/manifests/

总结

至此我们已经将整个k8s集群部署完成了,我们可以在集群的master节点上进行相应的学习和演练,来逐步的理解k8s的一些概念以及一些基本原理。

22

评论区