本站所有文章均为原创,如对您有帮助,恳请帮忙点击任何一处广告
  • 首页
  • K8S
  • K8S教程(2)使用kubeadm部署K8S集群

K8S教程(2)使用kubeadm部署K8S集群

发布:TangLu2020-4-21 15:19分类: K8S 标签: docker k8s kubernetes

一、K8S的安装方式介绍

k8s项目托管在github上(https://github.com/kubernetes)。要安装K8S集群的话常用以下2种方式:

1、二进制部署。用户需要把Master中心节点的所有组件通通安装,同理Node节点也需要安装对应的核心组件,还需要手动配置多组CA证书,过程繁琐,但是对理解K8S的详细运作是最好的。

2、kubeadmin部署。这是K8官方推出的集群管理工具,在K8S 1.13版本后已经可以在生产环境中使用,但需要注意证书的过期问题它把原本需要自己部署的组件通过镜像方式拉到本地进行使用。用户只需要安装好kubelet和docker,然后每个Master和Node节点上安装kubeadm即可,通过kubeadm init把第一个节点初始化为Master;通过kubeadm join将其他节点初始化为Node并加入集群。


二、使用kubeadm部署K8S

1、首先确认系统版本与CPU不低于最低要求

cat /etc/redhat-release  #确保每个节点的系统版本不低于Centos 7.6
hostname  #该节点在Kubernetes集群中的名字,不能使用localhost
lscpu  #核对CPU信息,CPU(s)不能低于2,Architecture为x86_64


2、在每个节点:配置hosts,确保互通;做好NTP时间同步;关闭selinux;清空iptables规则;建议把内核版本升级到4.x,升级后记得修改默认启动内核


3、在每个节点配置阿里云Docker-ce和K8S的YUM

#安装Docker
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum makecache fast
yum -y install docker-ce  #安装Docker
systemctl enable docker && systemctl start docker  #启动服务

#配置K8S仓库
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=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF


4、在每个节点使用yum安装kubelet、kubeadm、kubectl(客户端)并启动服务

yum install -y kubelet kubeadm kubectl  #由于官网未开放同步方式, 可能会有gpg检查失败的情况, 这时请用yum install -y --nogpgcheck kubelet kubeadm kubectl 安装
systemctl enable kubelet && systemctl start kubelet
setenforce 0  


三、K8S主节点部署与配置

1、K8S为了避免容器运行在swap导致效率变低,通常会要求先关闭swap分区才可以进行初始化操作。如果不想关闭的话按以下配置忽略因为SWAP分区产生的告警

#方法1:关闭swap,如果想永久关闭的话记得修改fstab
swapoff -a

#方法2:忽略swap错误
vi /etc/sysconfig/kubelet 
KUBELET_EXTRA_ARGS="--fail-swap-on=false"


2、打开系统中iptables桥接相关配置,允许将IPv4流量传递到iptables

echo 1 > /proc/sys/net/bridge/bridge-nf-call-iptables
echo 1 > /proc/sys/net/ipv4/ip_forward


3、由于kubeadm会从国外网站拉取镜像,当进行初始化的时候会出现failed to pull image k8s.gcr.io的错误。为了解决这个问题,可以提前手动下载镜像到本地,再修改tag。不过现在也可以通过选项来指定国内镜像仓库,如果指定了国内镜像仓库,那这步是可以跳过的

#拉取镜像
docker pull mirrorgooglecontainers/kube-apiserver:v1.14.2
docker pull mirrorgooglecontainers/kube-controller-manager:v1.14.2
docker pull mirrorgooglecontainers/kube-scheduler:v1.14.2
docker pull mirrorgooglecontainers/kube-proxy:v1.14.2
docker pull mirrorgooglecontainers/pause:3.1
docker pull mirrorgooglecontainers/etcd-amd64:3.3.10
docker pull coredns/coredns:1.3.1

#修改tag
docker tag mirrorgooglecontainers/kube-apiserver:v1.14.2  k8s.gcr.io/kube-apiserver:v1.14.2
docker tag mirrorgooglecontainers/kube-controller-manager:v1.14.2 k8s.gcr.io/kube-controller-manager:v1.14.2
docker tag mirrorgooglecontainers/kube-scheduler:v1.14.2 k8s.gcr.io/kube-scheduler:v1.14.2
docker tag mirrorgooglecontainers/kube-proxy:v1.14.2 k8s.gcr.io/kube-proxy:v1.14.2
docker tag mirrorgooglecontainers/pause:3.1 k8s.gcr.io/pause:3.1
docker tag mirrorgooglecontainers/etcd-amd64:3.3.10 k8s.gcr.io/etcd:3.3.10
docker tag coredns/coredns:1.3.1 k8s.gcr.io/coredns:1.3.1

#删除多余镜像
docker rmi mirrorgooglecontainers/kube-proxy:v1.14.2
docker rmi mirrorgooglecontainers/kube-apiserver:v1.14.2
docker rmi mirrorgooglecontainers/kube-controller-manager:v1.14.2
docker rmi mirrorgooglecontainers/kube-scheduler:v1.14.2
docker rmi mirrorgooglecontainers/etcd-amd64:3.3.10
docker rmi mirrorgooglecontainers/pause:3.1
docker rmi docker.io/coredns/coredns:1.3.1


4、使用kubeadm init命令对集群初始化,初始化过程中可以看到依次做了环境检测、镜像拉取、证书配置等操作。另外还有一个kubeadmin join的命令一定要记录下来,后续加入集群都是使用那个命令

kubeadm init --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12  --image-repository registry.aliyuncs.com/google_containers 
# --service-cidr:指定service VIP的IP地址段
# --pod-network-cidr:指定POD私有网络的IP地址段
# --iamge-repository:指定国内镜像仓库地址
# --kuberntes-version v1.18.1:指定需要的版本
# --ignore-preflight-errors:忽略因为系统配置SWAP而产生的错误

#命令成功执行后应该看到下面几条信息
[addons] Applied essential addon: CoreDNS  #安装了必要插件
[addons] Applied essential addon: kube-proxy  #同上
Your Kubernetes control-plane has initialized successfully!


5、复制配置文件到用户HOME目录

# 非root用户执行下面命令复制配置文件
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config

# root用户可以直接用下面的命令
export KUBECONFIG=/etc/kubernetes/admin.conf


6、验证K8S集群服务状态,看到是NotReady状态,这是因为还没有配置容器网络组件,如果初始化出现问题可以将初始化状态清理掉重新进行

kubectl get cs
kubectl get nodes
kubeadm reset  


k8s.png


7、为主节点配置网络组件flannel,通过https://github.com/coreos/flannel页面下方的Deploying flannel manually。可以找到一键部署的命令,运行完成后等一会儿,然后运行docker images命令可以看到flannel的镜像

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml


k8s2.png


8、查看namespace里的信息以验证flannel镜像是否拉取成功

kubectl get ns  #查看所有namespace
kubectl get pods -n kube-system  #查看指定namespace下的pods


k8s3.png


9、Master配置到这里已经完成


四、K8S Node节点部署与配置

1、关闭swap或者忽略SWAP告警

#方法1:直接关闭swap
swapoff -a 
#方法2:忽略swap错误
vi /etc/sysconfig/kubelet 
KUBELET_EXTRA_ARGS="--fail-swap-on=false"


2、打开系统中iptables桥接相关配置

echo 1 > /proc/sys/net/bridge/bridge-nf-call-iptables
echo 1 > /proc/sys/net/ipv4/ip_forward


3、使用kubeadm join命令将新节点加入集群,该命令是Master初始化完成后最后一段内容,建议保存好,因为包含了token信息,以后要加入节点都是运行该命令。如果命令提示no route to host请查看Master的iptables规则是否清空

kubeadm join 192.168.145.185:6443 --token 3g743d.h9t34niq0k3n73sx --discovery-token-ca-cert-hash sha256:ac13fc140298b3665e0436d353d94fed494e36b52485df532b4bb719bd6d2e11 --ignore-preflight-errors=Swap  #这里的IP就是第一个主节点IP


4、在主节点使用kubectl get nodes验证状态为Ready,如果提示Not Ready的话需要等node节点的镜像都拉取完毕。显示角色为<none>代表它可以成为其他角色。至此Node节点配置完毕

k8s4.png

k8s5.png


五、测试K8S集群

在K8S中创建一个pod,然后验证是否正常运行

kubectl create deployment nginx --image=nginx
kubectl expose deployment nginx --port=80 --type=NodePort
kubectl get pod,svc

六、为K8S新加Master节点

1、要新加Master节点需要使用kubeadm init命令上传第一个Master节点的CA证书(这些文件保存在/etc/kubernetes/pki中),命令执行后可以看到证书信息上传到kube-system这个namespace中的提示

kubeadm init phase upload-certs --upload-certs


addmaster1.png


2、上面命令除了上传证书到namespace中,还会生成一串key。这个key两小时后会失效,失效后可以重新生成。找到集群初始化后的kubeadm join命令,使用--certificate-key选项加上这串key

kubeadm join 192.168.111.120:6443 --token 1wr731.odgs0fl0v31k7x54  --control-plane   --discovery-token-ca-cert-hash sha256:2b2e660aa718de3ae492013faea779ecb220d0bf0f703cc03d3268b750e1be97  --certificate-keyc0b2c238f87c7c7safi579012567ce147


3、验证节点

kubectl get nodes

4、

温馨提示如有转载或引用以上内容之必要,敬请将本文链接作为出处标注,谢谢合作!
et_highlighter51
版权所有:《Linux运维技术学习站点
文章标题:《K8S教程(2)使用kubeadm部署K8S集群
除非注明,文章均为 《Linux运维技术学习站点》 原创
转载请注明本文短网址:http://www.linuxe.cn/post-580.html  [生成短网址]

已有 0/847 人参与

发表评论:

欢迎分享Linux运维技术学习站点

欢迎使用手机扫描访问本站,还可以关注微信哦~