老男孩教育专注IT教育10余年,只培养IT技术精英

全国免费咨询电话(渠道合作):400-609-2893

kubernetes集群部署(二)!Linux运维培训班

老男孩IT教育

技术博客

2022年8月29日 17:23

上一篇文章为大家介绍了Kubernetes是什么以及它的功能和组件,本篇文章带大家学习一下部署k8s集群架构!

  上一篇文章为大家介绍了Kubernetes是什么以及它的功能和组件,本篇文章带大家学习一下部署k8s集群架构!

  推荐阅读:【LinuxSRE工程师培训】kubernetes集群部署!

  部署k8s集群架构

  | k8s集群规划

  | 安装Linux基础环境

# 配置官方源更新地址:

curl -s -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

# 配置第三方epel源更新地址:

curl -s -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

# 非阿里云ESC产品推荐操作该步骤

sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo

# 安装常用工具包

yum install tree nmap dos2unix lrzsz nc lsof wget tcpdump htop iftop iotop sysstat nethogs psmisc net-tools bash-completion vim-enhanced -y

  | 关闭SeLinux和firewalld防火墙

# 关闭firewalld防火墙

systemctl stop firewalld

systemctl disable firewalld

# 关闭SeLinux

setenforce 0

sed -ri s'#(SELINUX=)enforcing#\1disabled#'

  | 部署单节点的etcd

  在master节点安装etcd服务

yum -y install etcd

  修改etcd的配置文件

cp /etc/etcd/etcd.conf /etc/etcd/etcd.conf-`date +%F`

vim /etc/etcd/etcd.conf

# egrep -v "^$|#" /etc/etcd/etcd.conf

ETCD_DATA_DIR="/var/lib/etcd/default.etcd"

ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379"

ETCD_NAME="default"

ETCD_ADVERTISE_CLIENT_URLS="http://10.0.0.101:2379"

  启动etcd并设置开机自启动

systemctl start etcd.service

systemctl enable etcd.service

  检查集群的健康状态

# etcdctl -C http://10.0.0.101:2379 cluster-health

member 8e9e05c52164694d is healthy: got healthy result from http://10.0.0.101:2379

cluster is healthy

  | master组件部署

  在master节点安装master服务

yum -y install kubernetes-master

  配置apiserver组件

cp /etc/kubernetes/apiserver /etc/kubernetes/apiserver-`date +%F`

vim /etc/kubernetes/apiserver

# 指定apiserver的监听地址,建议绑定所有地址。只能配置IP地址。

KUBE_API_ADDRESS="--insecure-bind-address=0.0.0.0


# 指定apiserver的监听端口。

KUBE_API_PORT="--port=8080"

# 指定KUBELET_PORT的端口

KUBELET_PORT="--kubelet-port=10250"

# etcd集群中以逗号分隔的节点列表

KUBE_ETCD_SERVERS="--etcd-servers=http://10.0.0.101:2379"

# 要用于服务(SERVICE)的地址范围

KUBE_SERVICE_ADDRESSES="--service-cluster-ip-range=10.254.0.0/16"

  配置master的组件

# egrep -v "^$|#" /etc/kubernetes/config

KUBE_LOGTOSTDERR="--logtostderr=true"

KUBE_LOG_LEVEL="--v=0"

KUBE_ALLOW_PRIV="--allow-privileged=false"

KUBE_MASTER="--master=http://10.0.0.101:8080"

  启动服务

systemctl enable kube-apiserver.service kube-controller-manager.service kube-scheduler.service

systemctl restart kube-apiserver.service kube-controller-manager.service kube-scheduler.service

  服务启动成功会监听多个端口

  检查服务是否安装正常

# kubectl get componentstatus

NAME                 STATUS    MESSAGE             ERROR

scheduler            Healthy   ok                  

controller-manager   Healthy   ok                  

etcd-0               Healthy   {"health":"true"}

  | node组件部署

  在所有的node节点上安装node服务

  温馨提示:

  如果你的环境足够"干净",则会自行安装相关的环境,当然也包括docker环境

yum -y install kubernetes-node

  修改配置文件指定master节点信息

  温馨提示:

  我们应该将所有的node节点都指向master节点

# vim /etc/kubernetes/config 

...

KUBE_MASTER="--master=http://10.0.0.101:8080"

  修改Kubelet组件的配置文件

  温馨提示:

  我们可以将当前的配置文件移动到其它node节点稍作修改即可,比如只需改动"KUBELET_HOSTNAME"

# vim /etc/kubernetes/kubelet
...

# 指定kubelet组件监听的地址,建议设置为'0.0.0.0',不能设置为主机名,否则不会监听相应的端口。KUBELET_ADDRESS="--address=0.0.0.0"

# 指定kubelet组件监听的地址端口。KUBELET_PORT="--port=10250"

# 指定主机名,也可以使用IP地址

KUBELET_HOSTNAME="--hostname-override=10.0.0.102"

# 指定apiserver的地址。KUBELET_API_SERVER="--api-servers=http://10.0.0.101:8080"

...

  启动服务并设置开机自启动

systemctl start kubelet.service kube-proxy.service 

systemctl enable kubelet.service kube-proxy.service 

# master节点检查

kubectl get node

  | 所有节点部署flannel网络插件

  安装flannel网络插件

  温馨提示:

  在master节点和所有的node节点部署flannel网络插件

yum -y install flannel

  修改flannel的配置文件

  温馨提示:

  所有节点都需要修改etcd的数据库地址,由于咱们的环境仅有一台,生产环境中是需要使用逗号分割指定集群的

sed -i 's#127.0.0.1#10.0.0.101#' /etc/sysconfig/flanneld

  修改etcd数据库信息

etcdctl mk /atomic.io/network/config '{"Network":"172.18.0.0/16","Backend": {"Type": "vxlan"}}'

  相关参数说明:

  node节点重启服务

systemctl enable flanneld.service 

systemctl restart flanneld.service 

systemctl  restart  docker

  测试不同node节点的容器是否可以互通:

  默认情况下是不会互通的,我们需要执行"iptables -P FORWARD ACCEPT"

  修改docker的启动脚本

# vim /usr/lib/systemd/system/docker.service

#在[Service]区域下增加一行

ExecStartPost=/usr/sbin/iptables -P FORWARD ACCEPT

...

# 使得文件生效并重启服务

systemctl daemon-reload && systemctl restart docker

  温馨提示:

  这是docker的一个小bug,请在所有的节点上都执行上述操作,包括master节点,因为后续会用到它

  | 配置master为镜像仓库

  安装镜像仓库

  温馨提示:

  请在k8s集群上的所有节点都进行上述的初始配置,以避免后续上传镜像速度较慢

#master节点安装docker

yum -y install docker


# 配置docker镜像源(所有机器都要执行)

cat >/etc/docker/daemon.json <<EOF

{

"registry-mirrors": ["https://01xxgaft.mirror.aliyuncs.com"],

"insecure-registries": ["10.0.0.101:5000"]

}

EOF


# 启动docker服务

systemctl restart docker && systemctl enable  docker

  启动镜像容器

docker container run -d -p 5000:5000 --restart=always --name registry -v oldboyedu_registry:/var/lib/registry  registry

  验证镜像容器是否正常工作

# master节点上传镜像

docker pull docker.io/alpine

docker image tag docker.io/alpine:latest 10.0.0.101:5000/alpine:latest

docker image push 10.0.0.101:5000/alpine:latest

# node节点下载镜像

docker image pull 10.0.0.101:5000/alpine:latest

  温馨提示:

  如果可以正常上传和下载镜像,说明咱们的镜像容器正常工作啦

  老男孩教育Linux云计算SRE课程汇集了虚拟化、云计算、安全攻防、Python开发、SRE等技术,课堂效率高、内容丰富全面,由浅入深,循序渐进,帮助学员稳扎稳打,夯实基础,在有限的时间内帮助学员高效提升,成为符合企业需求的技术型人才。

本文经授权发布,不代表老男孩教育立场。如若转载请联系原作者。