Kubernetes(k8s)-安装k8s(docker版)

204 阅读5分钟

作者介绍:简历上没有一个精通的运维工程师。希望大家多多关注作者,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。

我们上一章介绍了Docker基本情况,目前在规模较大的容器集群基本都是Kubernetes,但是Kubernetes涉及的东西和概念确实是太多了,而且随着版本迭代功能在还增加,笔者有些功能也确实没用过,所以只能按照我自己的理解来讲解。

我们上一小节讲解了k8s的中的一些概念,本小节k8s的安装进行讲解,主要分2小节来讲解,一个是基于docker的版本,一个是基于containerd。

Kubernetes的安装

Kubernetes提供了多种安装方式,可以根据你的需求和实际情况选择合适的方式。以下是几种常见的安装方式:

  1. kubeadm安装方式:
  • 使用kubeadm工具进行快速安装和配置Kubernetes集群。

  • 适用于测试和开发环境,以及小型生产环境。

  • 需要手动安装和配置一些必要的组件和插件,如网络插件。

  • 可以通过kubeadm init和kubeadm join命令初始化和加入节点。

  • 这个也本人使用最多的安装方式。

  1. kops安装方式:
  • 使用kops工具在云平台上(如AWS、GCP)快速创建和管理Kubernetes集群。

  • 提供自动化的集群生命周期管理功能,如创建、更新和删除集群。

  • 需要进行一些配置和准备工作,如设置DNS、创建SSH密钥等。

  • 可以通过kops create cluster和kops update cluster等命令来创建和更新集群。

  1. kubespray安装方式:
  • 使用kubespray(之前称为kube-ansible)工具通过Ansible脚本在裸机或虚拟机上部署Kubernetes集群。

  • 支持多种操作系统和发行版,如Ubuntu、CentOS等。

  • 需要一些准备工作,如设置SSH密钥、配置主机清单等。

  • 可以通过运行Ansible脚本来自动安装和配置集群。

  1. Managed Kubernetes服务:
  • 公有云提供商如AWS(Amazon EKS)、Azure(Azure Kubernetes Service)和Google Cloud Platform(Google Kubernetes Engine)等提供托管的Kubernetes服务。

  • 可以直接使用云平台的控制台或API来创建和管理Kubernetes集群。

  • 提供高可用性、自动缩放和备份等功能,提升了管理的便捷性。

  • 需要根据云平台的文档和指导进行操作。

这些只是几种常见的安装方式,还有其他的安装方式和工具可供选择,如Minikube、MicroK8s等。选择适合你的环境和需求的安装方式,可以根据实际情况进行评估和决策。

Kubeadm安装部署

生产集群都是以至少以3台机器准来部署高可用集群,如果是测试环境则1台即可,本文档则以1+1来实现配置。

IP地址

角色

主机名

192.168.31.211

master

master01

192.168.31.212

node

node01

准备工作

1.操作系统

如果没有特殊的要求,可直接用Centos,本次操作也是Centos7.9,也不用单独升级内核,由于是普通测试集群,所以不考虑那些。

2.初始化

#关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
#修改主机名,可根据需要自己规划名字
hostnamectl set-hostname master01
hostnamectl set-hostname node01
#关闭swap,并取消开启启动(如果没有可忽略)
swapoff -ased -ri 's/.*swap.*/#&/' /etc/fstab
#关闭selinux
setenforce 0
sed -i 's/enforcing/disabled/' /etc/selinux/config
#修改hosts,注意替换自己的ip地址
echo "192.168.31.210 master01" >>/etc/hosts
echo "192.168.31.211 node01" >>/etc/hosts
#调整内核参数
echo "net.bridge.bridge-nf-call-ip6tables=1" >> /etc/sysctl.d/kubernetes.conf
echo "net.bridge.bridge-nf-call-iptables=1" >> /etc/sysctl.d/kubernetes.conf
echo "net.ipv6.conf.all.disable_ipv6=1" >> /etc/sysctl.d/kubernetes.conf
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.d/kubernetes.conf
sysctl --system
#以上操作2台虚拟机均需要,
#重启,重启是为了让哪些参数能够自动生效。
reboot

部署

1.安装docker

wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
yum install -y docker-ce-20.10.24-3.el7
#这里选择的版本就是k8s支持的最后支持docker版本

2.配置docker

exec-opts 该参数是必选,其他可根据实际需要选填。后面的说明需要在真实应用去掉。

主要包括,修改docker主目录,修改默认仓库地址,修改仓库端口是为http,而非默认的https;修改docker的仓库证书不被信任及修改dockers日志的轮询规则。

{
  "data-root": "/new/docker/main/directory",                  #修改 Docker 主目录
  "registry-mirrors": ["http://myregistry.example.com:5000"], # 修改默认仓库地址和端口(HTTP)
  "insecure-registries": ["myregistry.example.com:5000"],     # 添加不信任的仓库
  "exec-opts": ["native.cgroupdriver=systemd"],              # 和kubelet保持一致,该选项必须
  "log-driver": "json-file",                                  # 设置日志驱动为 json-file
  "log-opts": {                                               # 设置日志轮询规则
    "max-size": "10m",                                        # 单个日志文件最大 10MB
    "max-file": "3"                                           # 仅保留最新的 3 个日志文件
  }
}

3.安装Kubernetes基础软件

#配置源
cat > /etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
#安装kubeadm,kubelet,kubectl,这里选择你的是最后一个支持Docker运行时的版本,如果不加版本号则是最新版本。
yum install -y kubeadm-1.23.12 kubelet-1.23.12 kubectl-1.23.12

4.启动Docker,Kubelet

systemctl start docker kubelet
systemctl enable docker kubelet

5.部署Master

默认Kubernetes所需要的镜像是是在国外的,所以如果不具有科学上网的情况下,有2种方法来实现:1.提前从其他地方将下载好的镜像,导入到本地。2.使用阿里云的镜像源地址。

kubeadm init \
--apiserver-advertise-address=192.168.31.211 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.23.12 \
--pod-network-cidr=10.244.0.0/16
#此处版本注意和上面的版本保持一致。

这个过程中会先下载镜像,完整的镜像如下图。

6.配置kubectl配置文件

#也是上面第一个红框的内容
#kubectl默认是http协议走8080端口
#配置这个下面以后就走https 6443端口
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/configsudo 
chown $(id -u):$(id -g) $HOME/.kube/config

7. 确认集群安装成功

[root@master01 ~]# kubectl  get node
NAME       STATUS   ROLES                  AGE   VERSION
master01   Ready    control-plane,master   47m   v1.23.12
[root@master01 ~]# kubectl  get pod -A
NAMESPACE     NAME                               READY   STATUS    RESTARTS   AGE
kube-system   coredns-6d8c4cb4d-v8mwg            1/1     Running   0          47m
kube-system   coredns-6d8c4cb4d-v94sl            1/1     Running   0          47m
kube-system   etcd-master01                      1/1     Running   4          48m
kube-system   kube-apiserver-master01            1/1     Running   4          48m
kube-system   kube-controller-manager-master01   1/1     Running   4          48m
kube-system   kube-proxy-5b8wk                   1/1     Running   0          47m
kube-system   kube-scheduler-master01            1/1     Running   6  

8.添加node节点

#就是安装过程中最后的红框
kubeadm join 192.168.31.211:6443 --token iwp8wv.1d51yeapj47n38up \
	--discovery-token-ca-cert-hash sha256:0eda99d94d64349caf2b4022a7760a4a99f7174ce2c882a427ff90aeb469a9c6 

上面的token只有24小时有效期,如果过了有效期还要添加节点则需要重新生成token。

#创建新
tokenkubeadm token create --print-join-command

9.再次查看node节点

[root@master01 ~]# kubectl get node
NAME       STATUS   ROLES                  AGE    VERSION
master01   Ready    control-plane,master   53m    v1.23.12
node01     Ready    <none>                 2m4s   v1.23.12

10.添加网络插件

#这个操作会有2个镜像更新,无法下载可以联系我获取
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

#我这也是中转下载的,然后上传到这个服务器。
[root@master01 ~]# kubectl  apply -f kube-flannel.yml 
namespace/kube-flannel created
clusterrole.rbac.authorization.k8s.io/flannel created
clusterrolebinding.rbac.authorization.k8s.io/flannel created
serviceaccount/flannel created
configmap/kube-flannel-cfg created
daemonset.apps/kube-flannel-ds created

到这里集群就算搭建完成,剩下的就是使用。

运维小路

一个不会开发的运维!一个要学开发的运维!一个学不会开发的运维!欢迎大家骚扰的运维!

关注微信公众号《运维小路》获取更多内容。