本站所有文章均为原创,如对您有帮助,恳请帮忙点击任何一处广告

K8S教程(2)使用kubeadm方式安装K8S 1.18集群

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

一、K8S的安装方式介绍

· 二进制部署

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

· kubeadmin部署

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


二、K8S集群所需系统基本环境配置

1、所有节点升级系统内核到4.18及以上

#导入ELRepo仓库的公共密钥
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
  
#安装elrepo仓库源
yum install https://www.elrepo.org/elrepo-release-7.el7.elrepo.noarch.rpm

#查看仓库中可用内核
yum --disablerepo="*" --enablerepo="elrepo-kernel" list available

#安装所需内核
yum --enablerepo="elrepo-kernel" install kernel-lt

#查看当前系统中可用内核,其中第一列的数字就是可用内核编号,如下
awk -F\' '$1=="menuentry " {print i++ " : " $2}' /etc/grub2.cfg
0 : CentOS Linux (4.18.7-1.el7.elrepo.x86_64) 7 (Core)
1 : CentOS Linux (3.10.0-862.11.6.el7.x86_64) 7 (Core)
2 : CentOS Linux (0-rescue-063ec330caa04d4baae54c6902c62e54) 7 (Core)

#切换默认内核,0代表使用4.18这个内核
grub2-set-default 0

kernel1.jpg


2、系统环境配置相关

# 所有节点做好hosts解析
cat /etcc/hosts
192.168.0.101 k8s-master01
192.168.0.102 k8s-master02
192.168.0.103 k8s-master03
192.168.0.200 k8s-master-lb
192.168.0.111 k8s-node01
192.168.0.112 k8s-node02

# 所有节点配置k8s集群中必须的内核参数
cat <<EOF > /etc/sysctl.d/k8s.conf
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-iptables = 1
fs.may_detach_mounts = 1
vm.overcommit_memory=1
vm.panic_on_oom=0
fs.inotify.max_user_watches=89100
fs.file-max=52706963
fs.nr_open=52706963
net.netfilter.nf_conntrack_max=2310720
net.ipv4.tcp_keepalive_time = 600
net.ipv4.tcp_keepalive_probes = 3
net.ipv4.tcp_keepalive_intvl =15
net.ipv4.tcp_max_tw_buckets = 36000
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_max_orphans = 327680
net.ipv4.tcp_orphan_retries = 3
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 16384
net.ipv4.ip_conntrack_max = 65536
net.ipv4.tcp_max_syn_backlog = 16384
net.ipv4.tcp_timestamps = 0
net.core.somaxconn = 16384
EOF

sysctl --system

# 所有节点关闭防火墙、selinux、swap等
systemctl disable  firewalld && systemctl stop  firewalld 
systemctl disable NetworkManager  && systemctl stop  NetworkManager 
setenforce 0
cat /etc/sysconfig/selinux
SELINUX=disabled
swapoff -a && sysctl -w vm.swappiness=0

# 所有节点配置好时间同步,ntp或chrony都可以,略

# 在每个节点配置阿里云Docker YUM源和加速器,安装Docker并开机自启,否则系统重启后K8S会因为镜像没启动而失败
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镜像加速以及驱动模式
cat > /etc/docker/daemon.json << EOF
{
  "registry-mirrors": ["https://6blvkhyf.mirror.aliyuncs.com"],
  "exec-opts": ["native.cgroupdrive-systemd"]
}
EOF

systemctl enable docker && systemctl start docker

# 配置K8S YUM
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

# 所有节点安装ipvsadm
yum install ipvsadm ipset sysstat conntrack libseccomp -y

# 在每个节点安装kubelet、kubeadm、kubectl并启动服务
yum install -y kubelet kubeadm kubectl  #由于官网未开放同步方式, 可能会有gpg检查失败的情况, 这时请用yum install -y --nogpgcheck kubelet kubeadm kubectl 安装
systemctl enable kubelet && systemctl start kubelet


三、kubeadm部署K8S Master

1、拉取K8S所需镜像

由于kubeadm初始化时会从国外地址k8s.gcr.io拉取镜像,如果服务器在国内的话是无法正常拉取的。所以这里需要先通过docker hub手动下载镜像再修改tag名,拉取前可以先配置好docker的镜像加速器。具体用到的仓库名可以去dockerhub去搜索,这里用到的是kubesphere。

#拉取镜像
docker pull kubesphere/kube-apiserver:v1.18.6
docker pull kubesphere/kube-controller-manager:v1.18.6
docker pull kubesphere/kube-scheduler:v1.18.6
docker pull kubesphere/kube-proxy:v1.18.6
docker pull kubesphere/pause:3.2
docker pull azhu/etcd:3.4.3-0
docker pull coredns/coredns:1.6.7

#修改tag
docker tag kubesphere/kube-apiserver:v1.18.6  k8s.gcr.io/kube-apiserver:v1.18.6
docker tag kubesphere/kube-controller-manager:v1.18.6 k8s.gcr.io/kube-controller-manager:v1.18.6
docker tag kubesphere/kube-scheduler:v1.18.6 k8s.gcr.io/kube-scheduler:v1.18.6
docker tag kubesphere/kube-proxy:v1.18.6 k8s.gcr.io/kube-proxy:v1.18.6
docker tag kubesphere/pause:3.2 k8s.gcr.io/pause:3.2
docker tag azhu/etcd:3.4.3-0 k8s.gcr.io/etcd:3.4.3-0
docker tag coredns/coredns:1.6.7 k8s.gcr.io/coredns:1.6.7

2、使用kubeadm init命令对集群初始化,可以直接用命令行初始化,也可以用配置文件的形式初始化。初始化时如果指定了国内镜像仓库可以自动去拉取所需镜像,如果这里能拉取成功的话第一步是可以不用做的初始化过程中可以看到依次做了环境检测、镜像拉取、证书配置等操作。命令运行完成后会生成kubeadmin join命令用于加入集群,一定要记录下来,后续加入集群都是使用那个命令,如果忘了话可以重新生成,后面会讲到。如果集群初始化失败可以运行kubeadm reset进行重置,然后重新初始化。

#配置文件初始化方式,配置文件需要添加pod网段等信息
kubeadm config print init-defaults > kubeadm-config.yaml
kubeadm init --config=kubeadm-config.yaml

#命令行初始化方式
kubeadm init --pod-network-cidr=192.168.0.0/16 --service-cidr=172.10.0.0/16  --image-repository registry.aliyuncs.com/google_containers --kubernetes-version 1.18.6
# --service-cidr:指定service网段
# --pod-network-cidr:指定K8S POD网段,不同的网络插件默认网段不一样
# --iamge-repository:指定国内镜像仓库地址
# --kuberntes-version 1.18.6:指定需要的版本
# --ignore-preflight-errors:忽略因为系统配置SWAP而产生的错误

#重置初始化状态
#kubeadm reset 


3、复制配置文件到用户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


4、验证K8S集群服务状态,看到是NotReady状态,这是因为还没有配置CNI容器网络接口(Container Network Interface),CNI标准要求节点与节点网络互通、节点与容器之间网络互通、容器与容器之间网络互通。

kubectl get nodes


5、K8S支持多种CNI,而从1.18开始推荐使用calico而不再是flannel(如果还需要flannel的话通过https://github.com/coreos/flannel页面下方的Deploying flannel manually可以找到一键部署的命令)。calico网页上提供了安装方式(https://docs.projectcalico.org/getting-started/kubernetes/self-managed-onprem/onpremises)运行完成后等一会儿,然后运行docker images命令可以看到CNI的镜像

#cacico安装方法
wget https://docs.projectcalico.org/manifests/calico.yaml
kubectl apply -f calico.yaml 

#flannel安装方法
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml


k8s2.png


6、查看kube-system这个名称空间下的pods信息,K8S组件默认都在该名称空间下。验证flannel镜像是否拉取成功以及node状态是否正常,都没问题的话Master节点就安装完成了

kubectl get ns  #查看所有namespace
kubectl get pods -n kube-system  #查看指定namespace下的pods
kubectl get node  #查看状态是否为Ready


k8s3.png


四、kubeadm部署K8S Node

1、使用kubeadm join命令将新节点加入集群,如果命令提示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


2、由于kubeadm生成的token是有过期时间的,可以通过以下方式重新创建node节点和master节点的token

#重新生成node节点token
kubectl get secret -n kube-system  #查看当前环境中的token和有效时间
kubectl get secret -n kube-system bootstrap-token0-5wfwud -o yaml  #查看bootstrap token信息,其中expiration就是过期时间,用base64命令解密可以看到准确时间
echo "expiration里的字符串" | base64 --decode  #查看过期时间
kubectl delete secret -n kube-system bootstrap-token0-5wfwud  #删除过期token
kubeadm token create --print-join-command  #生成新的node节点密钥

#重新生成master节点token
kubeadm init phase upload-certs --upload-certs


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

kubectl get pod -n kube-system -o wide  #在master执行此命令查看详情


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


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

已有 0/3886 人参与

发表评论:

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

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