当前位置:   article > 正文

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

kubeadm 怎么用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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

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
  • 1
  • 2
  • 3
  • 4
  • 5

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
  • 1
  • 2
  • 3
  • 4

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
  • 1
  • 2
  • 3
  • 4

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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

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
  • 1
  • 2
  • 3

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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

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
  • 1
  • 2

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"]
} 
  • 1
  • 2
  • 3
  • 4
  • 5

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

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

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
  • 1
  • 2

每个软件包的作用:

  • 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
  • 1
  • 2
  • 3

使用kubeadm初始化k8s集群

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

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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48

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

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

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

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
  • 1
  • 2
  • 3

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

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

master查看集群节点状况

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

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

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

17、安装kubernetes网络组件-Calico

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

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

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/578940
推荐阅读
相关标签
  

闽ICP备14008679号