【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

如果虚拟机无法连接centos7:https://blog.csdn.net/wenge1477/article/details/99708466

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 http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.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_netfilter

cat > /etc/sysconfig/modules/ipvs.modules <<EOF 
#!/bin/bash 
modprobe -- ip_vs 
modprobe -- ip_vs_rr 
modprobe -- ip_vs_wrr 
modprobe -- ip_vs_sh 
modprobe -- nf_conntrack_ipv4 
EOF

chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack_ipv4

脚本创建了的/etc/sysconfig/modules/ipvs.modules文件,保证在节点重启后能自动加载所需模块。 使用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 lvm2

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

yum install -y docker-ce

// 启动docker(启动后会自动生成/etc/docker目录,否则需要手动创建)
systemctl start docker 
  • 配置daemon.json
cat >/etc/docker/daemon.json <<EOF
{
  "registry-mirrors": ["https://hdi5v8p1.mirror.aliyuncs.com"],
  "exec-opts": ["native.cgroupdriver=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": ["native.cgroupdriver=systemd"]:Docker使用的文件驱动是systemd
  • 重启docker服务并加入开机启动
systemctl daemon-reload && systemctl restart docker && systemctl enable docker

五、安装kubeadm

所以节点必须安装kubelet kubeadm kubelectl

  • 安装kubelet kubeadm kubelectl(所有节点)
//导入阿里云的yum仓库
cat <<EOF > /etc/yum.repos.d/kubernetes.repo 
[kubernetes] 
name=Kubernetes 
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64 
enabled=1 
gpgcheck=0 
repo_gpgcheck=0 
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.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节点上运行)
//由于默认拉取镜像地址k8s.gcr.io国内无法访问,这里指定阿里云镜像仓库地址。
kubeadm init \
--apiserver-advertise-address=192.168.10.100 \
--image-repository registry.aliyuncs.com/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/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

kubectl get nodes
  • 安装Pod网络插件(只在master上运行)

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

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/a70459be0084506e4ec919aa1c114638878db11b/Documentation/kube-flannel.yml
这个地方可能会出现,无法获取到raw.githubusercontent.com的ip

解决方法:https://blog.csdn.net/weixin_38074756/article/details/109231865

master的网络插件启动成功:
在这里插入图片描述

  • node加入节点
    使用执行在kubeadm init输出的kubeadm join命令:
    在这里插入图片描述
    所有节点都加入后:
    在这里插入图片描述
  • kube-proxy开启ipvs
// 修改ConfigMap的kube-system/kube-proxy中的config.conf,把 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: 3
  selector:
    app: myweb
  template:
    metadata:
      labels:
        app: myweb
    spec:
      containers:
      - name: nginx
        image: nginx:1.13
        ports:
          - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: myweb
spec:
  type: NodePort
  ports:
  - port: 80
    nodePort: 30000
    targetPort: 80
  selector:
    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

访问地址:http://192.168.10.100:30000

六、链接

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值