k8s基础_kubeadm搭建k8s集群

kubeadm部署k8s集群(v1.20.2)

1.0 环境(三台主机)

主机名 地址 角色 配置
k8s-master 192.168.255.166 主节点 2核4G
k8s-node1 192.168.255.167 工作节点 1核2G
k8s-node2 192.168.255.168 工作节点 1核2G
  • 三台主机配置静态ip地址

具体文档:

markdown 复制代码
https://blog.csdn.net/panzhengxiang/article/details/161722213?spm=1001.2014.3001.5501
  • 配置主机名
bash 复制代码
hostnamectl set-hostname k8s-master
su

hostnamectl set-hostname k8s-node1
su

hostnamectl set-hostname k8s-node2
su
  • 配置host解析
bash 复制代码
cat >> /etc/hosts <<EOF
192.168.255.166   kub-k8s-master  k8s-master
192.168.255.167   kub-k8s-node1  k8s-node1
192.168.255.168   kub-k8s-node2 k8s-node2
EOF
  • 关闭防护墙
bash 复制代码
systemctl stop firewalld
systemctl disable firewalld
  • 关闭selinux
bash 复制代码
vim  /etc/selinux/config 
# 将selinux改为disabled
  • 时间同步
bash 复制代码
timedatectl set-timezone Asia/Shanghai
yum install -y ntpdate
ntpdate ntp.aliyun.com
  • 关闭swap分区
bash 复制代码
swapoff -a
  • 配置yum源(看以下文档)
markdown 复制代码
https://blog.csdn.net/panzhengxiang/article/details/161722753?spm=1001.2014.3001.5501

2.0 获取镜像(三台主机)

k8s版本和镜像版本必须保持一致

安装docker

  • 安装阿里云docker源
bash 复制代码
 [root@localhost ~]# yum install -y yum-utils device-mapper-persistent-data lvm2 git
 [root@localhost ~]# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
 
 # 清理缓存元数据
 yum --enablerepo=docker-ce-stable clean metadata
 
 # 清理系统yum缓存
 yum clean all && rm -rf /var/cache/yum
  • 安装docker-ce
bash 复制代码
  # 网络安装
  [root@localhost ~]# yum install docker-ce -y
  • 启动docker服务
bash 复制代码
 [root@localhost ~]#systemctl enable docker
 [root@localhost ~]#systemctl start docker
  • 查看docker版本以及运行状态
bash 复制代码
 [root@localhost ~]# docker -v
 [root@localhost ~]# docker info
  • 配置镜像加速器
bash 复制代码
bash -c "$(curl -sSL https://n3.ink/helper)"

本地导入k8s镜像

bash 复制代码
# 导入镜像
docker load -i /root/kube-apiserver-v1.20.2.tar
docker load -i /root/kube-controller-manager-v1.20.2.tar
docker load -i /root/kube-proxy-v1.20.2.tar
docker load -i /root/kube-scheduler-v1.20.2.tar
docker load -i /root/etcd-3.3.15.tar
docker load -i /root/pause-3.1.tar
docker load -i /root/coredns-1.6.2.tar


# 查看镜像
[root@k8s-master ~]# docker images 
REPOSITORY                           TAG       IMAGE ID       CREATED       SIZE
k8s.gcr.io/kube-proxy                v1.20.2   43154ddb57a8   5 years ago   118MB
k8s.gcr.io/kube-apiserver            v1.20.2   a8c2fdb8bf76   5 years ago   122MB
k8s.gcr.io/kube-controller-manager   v1.20.2   a27166429d98   5 years ago   116MB
k8s.gcr.io/kube-scheduler            v1.20.2   ed2c44fbdd78   5 years ago   46.4MB
k8s.gcr.io/etcd                      3.3.15    b2756210eeab   6 years ago   247MB
k8s.gcr.io/coredns                   1.6.2     bf261d157914   6 years ago   44.1MB
k8s.gcr.io/pause                     3.1       da86e6ba6ca1   8 years ago   742kB
[root@k8s-master ~]# 

3.0 集群部署(三台node)

三台服务器都需要安装kubeadmRPM包

  • 配置阿里云k8s-工具yum源
bash 复制代码
 # 
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[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


# 查看配置文件
cat   /etc/yum.repos.d/kubernetes.repo
  • 安装对应版本
bash 复制代码
yum install -y kubelet-1.20.2-0.x86_64 kubeadm-1.20.2-0.x86_64 kubectl-1.20.2-0.x86_64 ipvsadm
  • 加载ipv4相关内核模块
bash 复制代码
# 
cat <<EOF > /etc/modules-load.d/ipvs.conf 
ip_vs
ip_vs_lc
ip_vs_wlc
ip_vs_rr
ip_vs_wrr
ip_vs_lblc
ip_vs_lblcr
ip_vs_dh
ip_vs_sh
ip_vs_nq
ip_vs_sed
ip_vs_ftp
ip_vs_sh
nf_conntrack_ipv4
ip_tables
ip_set
xt_set
ipt_set
ipt_rpfilter
ipt_REJECT
ipip
EOF
  • 加载br_netfilter模块
bash 复制代码
br_netfilter模块,K8S 的 iptables 规则(K8S 核心的网络策略、Service 转发、Pod 访问控制都依赖 iptables)

# 
modprobe br_netfilter && echo "br_netfilter" >> /etc/modules-load.d/k8s.conf
  • 配置转发相关参数
bash 复制代码
# 
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.swappiness=0
EOF
  • 配置生效
bash 复制代码
# 
sysctl -p /etc/sysctl.d/k8s.conf && sysctl --system
  • 重启
bash 复制代码
# 查看ip_vs是否加载成功
lsmod | grep ip_vs

4.0 集群启动

4.1 三台服务器配置集群信息

  • 1.配置kubelet使用pause镜像
bash 复制代码
# 1.0 配置Cgoup变量
DOCKER_CGROUPS=`docker info |grep 'Cgroup' | awk ' NR==1 {print $3}'`
echo $DOCKER_CGROUPS


# 2.0 配置kubelet的cgroups
cat >/etc/sysconfig/kubelet<<EOF
KUBELET_EXTRA_ARGS="--cgroup-driver=$DOCKER_CGROUPS --pod-infra-container-image=k8s.gcr.io/pause:3.2"
EOF


tail /etc/sysconfig/kubelet
  • 2.启动kubelet
bash 复制代码
systemctl daemon-reload
systemctl enable kubelet && systemctl restart kubelet

4.2 master单独配置

master节点初始化
bash 复制代码
# 注意:ip要进行修改
kubeadm init --kubernetes-version=v1.20.2 --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=192.168.255.166



# 保存密钥
kubeadm join 192.168.255.166:6443 --token x4lw6m.rcmnw0phiv2ox50p \
    --discovery-token-ca-cert-hash sha256:d541fc18fa856191d0853b7b16882cd559d35eb6a79c49a25e4a4a081ad5a3a6 
报错解决(三台服务器都需要下镜像)

以下是报错:

bash 复制代码
[root@k8s-master ~]# kubeadm init --kubernetes-version=v1.20.2 --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=192.168.255.166
[init] Using Kubernetes version: v1.20.2
[preflight] Running pre-flight checks
	[WARNING IsDockerSystemdCheck]: detected "cgroupfs" as the Docker cgroup driver. The recommended driver is "systemd". Please follow the guide at https://kubernetes.io/docs/setup/cri/
	[WARNING SystemVerification]: this Docker version is not on the list of validated versions: 26.1.4. Latest validated version: 19.03
error execution phase preflight: [preflight] Some fatal errors occurred:
	[ERROR Swap]: running with swap on is not supported. Please disable swap
[preflight] If you know what you are doing, you can make a check non-fatal with `--ignore-preflight-errors=...`
To see the stack trace of this error execute with --v=5 or higher
[root@k8s-master ~]# 

解决方案:

bash 复制代码
# 通过以下命令来拉取镜像


images=(
pause:3.2
etcd:3.4.13-0
coredns:1.7.0
)
for imageName in ${images[@]} ; do
docker pull registry.aliyuncs.com/google_containers/$imageName
docker tag registry.aliyuncs.com/google_containers/$imageName k8s.gcr.io/$imageName
docker rmi registry.aliyuncs.com/google_containers/$imageName
done
kubectl验证主服务器状态
bash 复制代码
[root@k8s-master ~]# rm -rf $HOME/.kube
[root@k8s-master ~]# mkdir -p $HOME/.kube
[root@k8s-master ~]# cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[root@k8s-master ~]# chown $(id -u):$(id -g) $HOME/.kube/config

# 查看状态
[root@k8s-master ~]# systemctl status  kubelet
准备calico网络镜像(三台服务器)
bash 复制代码
docker pull calico/node:v3.20.6
docker pull calico/pod2daemon-flexvol:v3.20.6
docker pull calico/cni:v3.20.6
docker pull calico/kube-controllers:v3.20.6
部署calico网络插件
bash 复制代码
# 下载网络插件
curl https://docs.projectcalico.org/v3.20/manifests/calico.yaml -O

# 部署网络插件
[root@k8s-master ~]# kubectl apply -f  calico.yaml

# k8s-master中查看pod
[root@k8s-master ~] # kubectl get pod -A

4.3 node1配置

  • 先确保ipvs转发模块是否开启
bash 复制代码
[root@k8s-node1 ~]# sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 1
[root@k8s-node1 ~]# 
  • 加入集群
bash 复制代码
kubeadm join 192.168.255.166:6443 --token x4lw6m.rcmnw0phiv2ox50p \
    --discovery-token-ca-cert-hash sha256:d541fc18fa856191d0853b7b16882cd559d35eb6a79c49a25e4a4a081ad5a3a6

4.4 node2配置

  • 加入集群
bash 复制代码
kubeadm join 192.168.255.166:6443 --token x4lw6m.rcmnw0phiv2ox50p \
    --discovery-token-ca-cert-hash sha256:d541fc18fa856191d0853b7b16882cd559d35eb6a79c49a25e4a4a081ad5a3a6

4.5 master查看集群状态

bash 复制代码
# 查看node状态
[root@k8s-master ~]# kubectl get nodes 
NAME         STATUS   ROLES                  AGE   VERSION
k8s-master   Ready    control-plane,master   14m   v1.20.2
k8s-node1    Ready    <none>                 75s   v1.20.2
k8s-node2    Ready    <none>                 61s   v1.20.2
[root@k8s-master ~]# 



# 
[root@k8s-master ~]# kubectl get pod -A
NAMESPACE     NAME                                       READY   STATUS    RESTARTS   AGE
kube-system   calico-kube-controllers-577f77cb5c-4wjcg   1/1     Running   0          5m44s
kube-system   calico-node-5nmgp                          1/1     Running   0          5m44s
kube-system   calico-node-pqtdr                          1/1     Running   0          63s
kube-system   calico-node-tjtzk                          1/1     Running   0          49s
kube-system   coredns-74ff55c5b-6lg2j                    1/1     Running   0          13m
kube-system   coredns-74ff55c5b-hm2kz                    1/1     Running   0          13m
kube-system   etcd-k8s-master                            1/1     Running   0          14m
kube-system   kube-apiserver-k8s-master                  1/1     Running   0          14m
kube-system   kube-controller-manager-k8s-master         1/1     Running   0          14m
kube-system   kube-proxy-4t425                           1/1     Running   0          13m
kube-system   kube-proxy-hd5vt                           1/1     Running   0          49s
kube-system   kube-proxy-xqngw                           1/1     Running   0          63s
kube-system   kube-scheduler-k8s-master                  1/1     Running   0          14m
[root@k8s-master ~]# kubectl get nodes 
NAME         STATUS   ROLES                  AGE   VERSION
k8s-master   Ready    control-plane,master   14m   v1.20.2
k8s-node1    Ready    <none>                 75s   v1.20.2
k8s-node2    Ready    <none>                 61s   v1.20.2
[root@k8s-master ~]# 

5.0 集群关闭

关机

先关node,再关master

开机

先开master,再开node

相关推荐
暴力求解10 小时前
Linux网络---传输层协议TCP(二)
linux·服务器·开发语言·网络·tcp/ip
JoyCong199810 小时前
ToDesk个人版、专业版、游戏版、设计版、性能版、团队版权益介绍
大数据·运维·游戏·远程工作·远程操作
ltl11 小时前
mTLS 工程实践:服务间双向认证怎么落地
kubernetes
ltl11 小时前
序列化格式深度对比:Protobuf、FlatBuffers、Cap’n Proto
linux
lengjingzju11 小时前
编译与调试完全指南—第17章 总结
linux
ltl11 小时前
容器网络性能真相:veth vs macvlan vs eBPF 数据面
linux
tryCbest11 小时前
Docker 从零到精通:知识与跨平台使用指南
docker·容器
Elastic 中国社区官方博客12 小时前
ES95:面向 Elasticsearch 时间序列指标的自适应压缩
大数据·运维·elasticsearch·搜索引擎·架构·全文检索
mqiqe13 小时前
AgentScope Java 2.0 Agent 状态存储(AgentStateStore)深度解析:构建可恢复、可扩展的智能体运行时
java·运维·网络
mennekes13 小时前
数据中心安全配电设备如何选择?
运维·人工智能·科技·安全·制造