初始化安装K8s集群以及docker服务(附详细步骤和代码!)

一、什么是K8S?

Kubernetes,也被称为K8s,是一个用于自动化部署、扩展和管理容器化应用程序的开源系统,是生产级别的容器编排系统.

二、初始化安装k8s集群的实验环境

环境介绍:3台全新的centos7.9系统、cpu2核、内存4G、磁盘20G

1、配置好ip地址和设置对应的主机名

控制节点 k8s-master 192.168.145.2213
工作节点 k8s-node1 192.168.145.222
工作节点 k8s-node2 192.168.145.223
(注意:以下操作三台服务器均要完成,可使用发送键输入到所有会话功能,然后在master一端输入即可,工作节点会同步进行)

在这里插入图片描述

2、关闭SELINUX和防火墙

[root@k8s-master ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
[root@k8s-master ~]# service firewalld stop
Redirecting to /bin/systemctl stop firewalld.service
[root@k8s-master ~]# systemctl disable firewalld
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
##重启
[root@k8s-master ~]# reboot

3、修改/etc/hosts文件,添加k8s集群里的主机和ip地址的映射关系

[root@localhost ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.145.221 k8s-master
192.168.145.222 k8s-node1
192.168.145.223 k8s-node2

4、互相之间建立免密通道(每台机器都要)

k8s-master:

[root@k8s-master ~]# ssh-keygen  #一路回车,不输入密码
#把本地生成的密钥文件和私钥文件拷贝到远程主机
[root@k8s-master ~]# ssh-copy-id k8s-master
[root@k8s-master ~]# ssh-copy-id k8s-node1
[root@k8s-master ~]# ssh-copy-id k8s-node2

k8s-node1:

[root@k8s-node1 ~]# ssh-keygen
[root@k8s-node1 ~]# ssh-copy-id k8s-node1
[root@k8s-node1 ~]# ssh-copy-id k8s-node2
[root@k8s-node1 ~]# ssh-copy-id k8s-master

k8s-node2:

[root@k8s-node2 ~]# ssh-keygen
[root@k8s-node2 ~]# ssh-copy-id k8s-node2
[root@k8s-node2 ~]# ssh-copy-id k8s-node1
[root@k8s-node2 ~]# ssh-copy-id k8s-master

5、关闭swap分区

临时关闭:swapoff -a
永久关闭:注释swap挂载 vim /etc/fstab
在这里插入图片描述
为什么要注释swap分区?
因为机器内存不够的情况下,机器会使用swap交换分区,但swap分区的性能较低,k8s设计的时候为了提升性能,是默认不允许使用交换分区的。如果在k8s初始化失败,可能是因为swap分区没有关闭。

6、加载内核模块

[root@k8s-master ~]# modprobe br_netfilter`
[root@k8s-master ~]# echo "modprobe br_netfilter" >> /etc/profile
[root@k8s-master ~]# 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
EOF
[root@k8s-master ~]#  sysctl -p /etc/sysctl.d/k8s.conf

sysctl是在运行时配置内核参数
-p 从指定的文件加载系统参数,如不指定即从/etc/sysctl.conf中加载

7、配置阿里云repo源

[root@k8s-master ~]# yum install -y yum-utils
[root@k8s-master ~]# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
[root@k8s-master ~]# yum install -y yum-utils device-mapper-persistent-data lvm2 wget net-tools nfs-utils lrzsz gcc gcc-c++ make cmake libxml2-devel openssl-devel curl curl-devel unzip sudo ntp libaio-devel wget vim ncurses-devel autoconf automake zlib-devel python-devel epel-release openssh-server socat ipvsadm conntrack ntpdate telnet ipvsadm

8、配置安装k8s组件需要的阿里云的repo源

[root@k8s-master ~]# vim /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

9、配置时间同步

#安装ntpdate命令
[root@k8s-master ~]# yum install ntpdate -y
#跟网络时间做同步
[root@k8s-master ~]# ntpdate cn.pool.ntp.org
#把时间同步做成计划任务
[root@k8s-master ~]# crontab -e
* */1 * * * /usr/sbin/ntpdate cn.pool.ntp.org
#重启crond服务
[root@k8s-master ~]#service crond restart

三、安装docker服务

10、安装docker服务和开机启动

[root@k8s-master ~]# yum install docker-ce-20.10.6 -y
[root@k8s-master ~]# systemctl start docker && systemctl enable docker.service

11、配置docker镜像加速器和驱动

[root@k8s-master ~]# vim  /etc/docker/daemon.json
{
 "registry-mirrors":["https://rsbud4vc.mirror.aliyuncs.com","https://registry.docker-cn.com","https://docker.mirrors.ustc.edu.cn","https://dockerhub.azk8s.cn","http://hub-mirror.c.163.com"],
  "exec-opts": ["native.cgroupdriver=systemd"]
} 

#修改docker文件驱动为systemd,默认为cgroupfs,kubelet默认使用systemd,两者必须一致才可以

[root@k8s-master ~]# systemctl daemon-reload  && systemctl restart docker
[root@k8s-master ~]# systemctl status docker

12、安装初始化k8s需要的软件包

[root@k8s-master ~]#  yum install -y kubelet-1.20.6 kubeadm-1.20.6 kubectl-1.20.6
[root@k8s-master ~]# systemctl enable kubelet

每个软件包的作用:

  • Kubeadm: kubeadm是一个工具,用来初始化k8s集群的
  • kubelet: 安装在集群所有节点上,用于启动Pod的
  • kubectl: 通过kubectl可以部署和管理应用,查看各种资源,创建、删除和更新各种组件

13、kubeadm初始化k8s集群

#把初始化k8s集群需要的离线镜像包上传到k8s-master、node1、node2机器上(可以用scp给node节点传过去,提升速率)

[root@k8s-master ~]# docker load -i k8simage-1-20-6.tar.gz
[root@k8s-master ~]# scp k8simage-1-20-6.tar.gz k8s-node1:/root
[root@k8s-master ~]# scp k8simage-1-20-6.tar.gz k8s-node2:/root

使用kubeadm初始化k8s集群

[root@k8s-master~]# kubeadm config print init-defaults > kubeadm.yaml

kubeadm.yaml配置如下:

apiVersion: kubeadm.k8s.io/v1beta2
bootstrapTokens:
- groups:
  - system:bootstrappers:kubeadm:default-node-token
  token: abcdef.0123456789abcdef
  ttl: 24h0m0s
  usages:
  - signing
  - authentication
kind: InitConfiguration
localAPIEndpoint:
  advertiseAddress: 192.168.145.221 #控制节点(master)的ip
  bindPort: 6443
nodeRegistration:
  criSocket: /var/run/dockershim.sock
  name: xianchaomaster1 #控制节点主机名
  taints:
  - effect: NoSchedule
    key: node-role.kubernetes.io/master
---
apiServer:
  timeoutForControlPlane: 4m0s
apiVersion: kubeadm.k8s.io/v1beta2
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controllerManager: {}
dns:
  type: CoreDNS
etcd:
  local:
    dataDir: /var/lib/etcd
imageRepository: registry.aliyuncs.com/google_containers
kind: ClusterConfiguration
kubernetesVersion: v1.20.6
networking:
  dnsDomain: cluster.local
  serviceSubnet: 10.96.0.0/12
  podSubnet: 10.244.0.0/16 #指定pod网段, 需要新增加这个
scheduler: {}
#追加如下几行
---
apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
mode: ipvs
---
apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
cgroupDriver: systemd

14、基于kubeadm.yaml文件初始化k8s

[root@k8s-master~]# kubeadm init --config=kubeadm.yaml --ignore-preflight-errors=SystemVerification

显示如下的结果,则说明安装完成:
在这里插入图片描述

15、配置kubectl的配置文件config

相当于对kubectl进行授权,这样kubectl命令可以使用这个证书对k8s集群进行管理

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

16、扩容k8s集群,添加工作节点(在node1、2上输入命令)

[root@k8s-master ~]# kubeadm join 192.168.145.221:6443 --token abcdef.0123456789abcdef \
    --discovery-token-ca-cert-hash sha256:c7ccdd9cfd97afcf738bc47601d519c20d84a422738bc47601d519c20

master查看集群节点状况

[root@k8s-master ~]# kubectl get nodes

(下面状态都是NotReady状态,说明没有安装网络插件)
在这里插入图片描述
可以看到node1、node2的ROLES角色为空,就表示这个节点是工作节点。
#可以把node1和node2的ROLES变成work,按照如下方法:

[root@k8s-master ~]#  kubectl label node k8s-node1 node-role.kubernetes.io/worker=worker

17、安装kubernetes网络组件-Calico

注:在线下载配置文件地址是: https://docs.projectcalico.org/manifests/calico.yaml

[root@k8s-master ~]# kubectl apply -f  calico.yaml

再次查看集群状态,STATUS状态是Ready,说明k8s集群正常运行了
在这里插入图片描述

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
安装Kubernetesk8s集群涉及多个步骤,下面是一个详细的步骤指南: 1. 配置主机: - 使用虚拟机或物理机准备至少三个节点,这些节点将组成Kubernetes集群。其中一个节点将被指定为主节点(Master),其余的节点将作为工作节点(Worker)。 - 确保每个节点上的操作系统是支持的,例如CentOS或Ubuntu,并且操作系统版本符合要求。 2. 安装Docker: - 在每个节点上安装Docker容器引擎。你可以按照Docker官方文档的指南进行安装。 3. 配置主节点(Master): - 在主节点上安装和配置Kubernetes控制平面组件。你可以使用工具如kubeadmkubespray或kops来简化此过程。 - 初始化主节点并获取访问令牌以及集群加入命令。 4. 加入工作节点(Worker): - 在每个工作节点上运行加入命令,将工作节点加入到Kubernetes集群中。 5. 安装网络插件: - 选择并安装适合你的网络插件,例如Calico、Flannel或Weave。 - 配置网络插件以使其与你的集群环境兼容。 6. 部署应用程序: - 使用kubectl命令行工具或Kubernetes Dashboard部署应用程序到集群中。 - 创建Pod、Service、Deployment等资源对象来管理和扩展应用程序。 7. 验证集群: - 使用kubectl命令行工具验证集群的状态和健康状况。 - 确保工作节点正常加入集群,并且应用程序能够正常运行。 这只是一个大致的步骤指南,实际安装和配置过程可能因环境和需求而有所不同。你可以参考Kubernetes官方文档或其他可靠资源,以获取更详细的步骤和配置信息。安装和配置Kubernetes集群需要一定的经验和技能,建议在生产环境中谨慎操作或寻求专业支持。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值