【k8s】k8s使用kubeadm安装集群

阅读: 评论:0

【k8s】k8s使用kubeadm安装集群

【k8s】k8s使用kubeadm安装集群

k8s使用kubeadm安装集群

一、简介

k8s全称kubernetes,这个名字大家应该都不陌生,k8s是为容器服务而生的一个可移植容器的编排管理工具,越来越多的公司正在拥抱k8s,并且当前k8s已经主导了云业务流程,推动了微服务架构等热门技术的普及和落地,正在如火如荼的发展

1.1 为什么使用k8s

k8s是一个开源的容器集群管理系统,可以实现容器集群的自动化部署、自动扩缩容、维护等功能

1.2 优点

  • 故障迁移:当某一个node节点关机或挂掉后,node节点上的服务会自动转移到另一个node节点上,这个过程所有服务不中断
  • 资源调度:当node节点上的cpu、内存不够用的时候,可以扩充node节点
  • 资源隔离:创建开发、运维、测试三个命名空间,切换上下文后,开发人员就只能看到开发命名空间的所有pod,看不到运维命名空间的pod,这样就不会造成影响,互不干扰
  • 安全:不同角色有不同的权限,查看pod、删除pod等操作

二、机器准备工作

搭建k8s集群需要使用至少3台虚拟机

2.1 安装VM、Centos7

安装的详细细节可以参考:vm安装centos7

  • vm:
    链接:–s6w-dRmxQ
    提取码:te72
  • centos7镜像:
    链接:
    提取码:29x2

如果虚拟机无法连接centos7:

2.2 主机准备

主机名ip
k8s-master01192.168.10.100
k8s-node01192.168.10.101
k8s-node02192.168.10.102

Master节点:etcd、api-server、controlor-manager、scheduler
Node节点:kubelet、kube-proxy、docker

三、系统初始化

系统初始化针对于-所有节点操作

  • 设置系统主机名
    192.168.10.100: hostnamectl set-hostname k8s-master01
    192.168.10.101: hostnamectl set-hostname k8s-node01
    192.168.10.102: hostnamectl set-hostname k8s-node02
  • 安装依赖包
yum install -y conntrack ntpdate ntp jq  
curl sysstat libseccomp wget net-tools vim git
  • 关闭selinux和swap
swapoff -a && sed -i '/ swap / s/^(.*)$/#1/g' /etc/fstab setenforce 0 && sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
  • firewalld
systemctl disable firewalld
systemctl stop firewalld
  • 添加主机名与ip对应关系
cat /etc/hosts 
192.168.10.100 k8s-master01
192.168.10.101 k8s-node01
192.168.10.102 k8s-node02
  • 升级系统内核为 4.44
    CentOS 7.x 系统自带的 3.10.x 内核存在一些 Bugs,导致运行的 Docker、Kubernetes 不稳定
rpm -Uvh .0-3.arch.rpm//安装完成后检查 /boot/grub2/grub.cfg 中对应内核 menuentry 中是否包含 initrd16 配置,如果没有,再安装 一次! 
yum --enablerepo=elrepo-kernel install -y kernel-lt // 设置开机从新内核启动 
grub2-set-default 'CentOS Linux (4.4.189-1.el7.elrepo.x86_64) 8 (Core)'
  • kube-proxy开启ipvs的前置条件
    ipvs:解决svc(service)和pod之间的调度关系,并且性能/功能都比iptables强大很多
modprobe br_netfiltercat > /etc/sysconfig/dules <<EOF 
#!/bin/bash 
modprobe -- ip_vs 
modprobe -- ip_vs_rr 
modprobe -- ip_vs_wrr 
modprobe -- ip_vs_sh 
modprobe -- nf_conntrack_ipv4 
EOFchmod 755 /etc/sysconfig/dules && bash /etc/sysconfig/dules && lsmod | grep -e ip_vs -e nf_conntrack_ipv4

脚本创建了的/etc/sysconfig/dules文件,保证在节点重启后能自动加载所需模块。 使用lsmod | grep -e ip_vs -e nf_conntrack_ipv4命令查看是否已经正确加载所需的内核模块。

  • 安装ipset和ipvsadm
yum install ipset ipvsadm -y

四、安装docker

每个节点都必须安装docker

  • 添加yum源以及安装
yum install -y yum-utils device-mapper-persistent-data lvm2yum-config-manager --add-repo .repoyum install -y docker-ce// 启动docker(启动后会自动生成/etc/docker目录,否则需要手动创建)
systemctl start docker 
  • 配置daemon.json
cat >/etc/docker/daemon.json <<EOF
{"registry-mirrors": [""],"exec-opts": [&#updriver=systemd"], "log-driver": "json-file", "log-opts": { "max-size": "100m" }
}
EOF// daemon参数解释
registry-mirrors:Docker镜像加速log-driver:Docker用来接收来自容器内部stdout/stderr的日志的模块 json-file会将容器日志存储在docker host machine的/var/lib/docker/containers/<container id>/<container id>-json.log(需要root权限才能够读),既然日志是存在磁盘上的,那么就要磁盘消耗的问题。下面介绍两个关键参数:- max-size,单个日志文件最大尺寸,当日志文件超过此尺寸时会滚动,即不再往这个文件里写,而是写到一个新的文件里。默认值是-1,代表无限。- max-files,最多保留多少个日志文件。默认值是1。"exec-opts": [&#updriver=systemd"]:Docker使用的文件驱动是systemd
  • 重启docker服务并加入开机启动
systemctl daemon-reload && systemctl restart docker && systemctl enable docker

五、安装kubeadm

所以节点必须安装kubelet kubeadm kubelectl

  • 安装kubelet kubeadm kubelectl(所有节点)
//导入阿里云的yum仓库
cat <<EOF > /pos.po 
[kubernetes] 
name=Kubernetes 
baseurl= 
enabled=1 
gpgcheck=0 
repo_gpgcheck=0 
gpgkey=.gpg .gpg
EOF// 指定安装版本(这里统一使用1.15.1)
yum -y install kubeadm-1.15.1 kubectl-1.15.1 kubelet-1.15.1
systemctl enable kubelet.service
  • 初始化Kubermetes(这个只在master节点上运行)
//由于默认拉取镜像地址io国内无法访问,这里指定阿里云镜像仓库地址。
kubeadm init 
--apiserver-advertise-address=192.168.10.100 
--image-repository registry.aliyuncs/google_containers 
--kubernetes-version v1.15.1 
--service-cidr=10.1.0.0/16   
--pod-network-cidr=10.244.0.0/16

初始化master节点重要截图:

使用kubectl工具:

mkdir -p $HOME/.kube
sudo cp -i /etc/f $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/configkubectl get nodes
  • 安装Pod网络插件(只在master上运行)

只在master节点操作,当node节点加入的时候也会自动安装该插件

kubectl apply -f .yml
这个地方可能会出现,无法获取到raw.githubusercontent的ip

解决方法:

master的网络插件启动成功:

  • node加入节点
    使用执行在kubeadm init输出的kubeadm join命令:

    所有节点都加入后:
  • kube-proxy开启ipvs
// 修改ConfigMap的kube-system/kube-proxy中的f,把 mode: "" 改为mode: “ipvs" 保存退出即可。
kubectl edit cm kube-proxy -n kube-system// 删除之前的proxy pod
kubectl get pod -n kube-system |grep kube-proxy |awk '{system("kubectl delete pod "$1" -n kube-system")}'
  • 测试Kubernetes集群
    在Kubernetes集群中创建一个rc,验证是否正常运行:
    创建一个文件:nginx_obj.yaml
apiVersion: v1
kind: ReplicationController
metadata:name: myweb
spec:replicas: 3selector:app: mywebtemplate:metadata:labels:app: mywebspec:containers:- name: nginximage: nginx:1.13ports:- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:name: myweb
spec:type: NodePortports:- port: 80nodePort: 30000targetPort: 80selector:app: myweb

创建rc

kubectl create -f nginx_obj.yaml

查看pod和svc信息

[root@k8s-master01 ~]# kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
myweb-l4vkm 1/1 Running 0 5s 10.244.1.2 k8s-node01
myweb-qdxgp 1/1 Running 0 5s 10.244.3.2 k8s-node02
[root@k8s-master01 ~]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.1.0.1 443/TCP 22m
myweb NodePort 10.1.205.42 80:30000/TCP 38s

访问地址:192.168.10.100:30000

六、链接

本文发布于:2024-01-29 03:08:17,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170646890212261.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:集群   k8s   kubeadm
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23