目录

 

 

一、什么是kubernets

Kubernetes简介
Kubernetes是容器集群管理系统,是一个开源的平台,可以实现容器集群的自动化部署、自动扩缩容、维护等功能。
快速部署应用
快速扩展应用
无缝对接新的应用功能
节省资源,优化硬件资源的使用

使用kubeadm方式部署K8S集群_ico

 

Kubernetes 特点

可移植: 支持公有云,私有云,混合云,多重云(multi-cloud)
可扩展: 模块化, 插件化, 可挂载, 可组合
自动化: 自动部署,自动重启,自动复制,自动伸缩/扩展
传统的应用部署方式是通过插件或脚本来安装应用。这样做的缺点是应用的运行、配置、管理、所有生存周期将与当前操作系统绑定,这样做并不利于应用的升级更新/回滚等操作,当然也可以通过创建虚机的方式来实现某些功能,但是虚拟机非常重,并不利于可移植性。

新的方式是通过部署容器方式实现,每个容器之间互相隔离,每个容器有自己的文件系统 ,容器之间进程不会相互影响,能区分计算资源。相对于虚拟机,容器能快速部署,由于容器与底层设施、机器文件系统解耦的,所以它能在不同云、不同版本操作系统间进行迁移。

容器占用资源少、部署快,每个应用可以被打包成一个容器镜像,每个应用与容器间成一对一关系也使容器有更大优势,使用容器可以在build或release 的阶段,为应用创建容器镜像,因为每个应用不需要与其余的应用堆栈组合,也不依赖于生产环境基础结构,这使得从研发到测试、生产能提供一致环境。类似地,容器比虚机轻量、更“透明”,这更便于监控和管理。

使用kubeadm方式部署K8S集群_docker_02

 

二、Kubernets本地化部署方式

 1.minikube

Minikube是一个工具,可以在本地快速运行一个单点的Kubernetes,尝试Kubernetes或日常开发的用户使用。不能用于生产环境。

官方地址:https://minikube.sigs.k8s.io/docs/start/

使用kubeadm方式部署K8S集群_ico_03

 

2.kubeadm

Kubeadm也是一个工具,提供kubeadm init和kubeadm join,用于快速部署Kubernetes集群。

官方地址:https://kubernetes.io/zh/docs/setup/production-environment/tools/kubeadm/

使用kubeadm方式部署K8S集群_ico_04

 

 

三、部署环境

根据实际需要部署生产环境K8S集群,所以选取kubeadm部署方式

使用kubeadm方式部署K8S集群_生产环境_05

 

四、docker-ce安装

1.下载docker-ce仓库
 
2.替换docker-ce仓库服务器地址
替换docker_repo
vim docker-ce.repo
 
3.删除旧版本docker
yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-selinux \ docker-engine-selinux \ docker-engine \ docker \ docker-ce \ docker-ee
 
4.安装docker-ce
yum install docker-ce
 
5.增添阿里云镜像加速器并设置cgroupdriver
mkdir -p /etc/docker
vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://4e2n79y3.mirror.aliyuncs.com"],"exec-opts": ["native.cgroupdriver=systemd"]
}
 
6.重启docker服务
systemctl daemon-reload
systemctl restart docker
systemctl enable docker
 
7.修改docker默认存储位置
vim /etc/systemd/system/multi-user.target.wants/docker.service
ExecStart=/usr/bin/dockerd --graph=/data/docker
 
8.iptable桥转发功能开启
echo 1 > /proc/sys/net/bridge/bridge-nf-call-iptables
echo 1 > /proc/sys/net/bridge/bridge-nf-call-ip6tables
echo 1 > /proc/sys/net/ipv4/ip_forward

 

五、kubernets部署

1.master主机操作
1.1安装kubelet kubeadm kubectl
配置k8s仓库
cd /etc/yum.repos.d/
vim 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
 
查看安装包版本
yum list kubelet --showduplicates
 
yum安装kubelet、kubeadm、kubectl
yum install -y --nogpgcheck kubelet-1.20.2-0 kubeadm-1.20.2-0 kubectl-1.20.2-0
 
设置开机启动kubelet
systemctl enable kubelet
 
设置忽略swap
vim /etc/sysconfig/kubelet
KUBELET_EXTRA_ARGS="--fail-swap-on=false"
 
设置可以用tab补齐键
yum install bash-completion.noarch -y
vim /etc/profile
source <(kubectl completion bash)
 
source /etc/profile
 
1.2 初始化master
关闭swap
swapoff -a
 
初始化部署
kubeadm init --kubernetes-version=v1.20.2 --image-repository registry.aliyuncs.com/google_containers --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12
 
创建配置文件
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
 
编辑静态node集群组件
cd /etc/kubernetes/manifests
vim kube-controller-manager.yaml
vim kube-scheduler.yaml
spec:
  containers:
  - command:
    - kube-scheduler
    - --authentication-kubeconfig=/etc/kubernetes/scheduler.conf
    - --authorization-kubeconfig=/etc/kubernetes/scheduler.conf
    - --bind-address=127.0.0.1
    - --kubeconfig=/etc/kubernetes/scheduler.conf
    - --leader-elect=true
    #- --port=0
 
 
2.node主机操作
2.1安装kubelet kubeadm
配置k8s仓库
cd /etc/yum.repos.d/
vim 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
 
yum安装kubelet、kubeadm
yum install -y --nogpgcheck kubelet-1.20.2-0 kubeadm-1.20.2-0 kubectl-1.20.2-0
 
 
2.2 node加入集群
kubeadm join 192.168.8.241:6443 --token z89jkt.taqmtwrm9y13grtc     --discovery-token-ca-cert-hash sha256:cecc1fcbb3c848878fc204fa2b938cf0f15283f61d47bf5a4c4acca3227cffe2
 
重新创建token(如果忘记token)
kubeadm token create --print-join-command
 
3.master主机操作
3.1部署网络插件(https://docs.projectcalico.org/getting-started/kubernetes/self-managed-onprem/onpremises#install-calico-on-nodes)
下载calico
cd /usr/local/k8s
curl https://docs.projectcalico.org/manifests/calico.yaml -O
 
修改calico配置清单
vim calico.yaml
            # The default IPv4 pool to create on startup if none exists. Pod IPs will be
            # chosen from this range. Changing this value after installation will have
            # no effect. This should fall within `--cluster-cidr`.
            - name: CALICO_IPV4POOL_CIDR
              value: "10.244.0.0/16"
            - name: IP_AUTODETECTION_METHOD
              value: "interface=ens33"  # ens 根据实际网卡开头配置
 
创建calico
kubecl -f calico.yaml
 
3.2.部署metric server
下载metrics
/usr/local/src/k8s/
curl -Ls https://api.github.com/repos/kubernetes-sigs/metrics-server/tarball/v0.3.6 -o metrics-server-v0.3.6.tar.gz
 
解压metrics
tar -xvf metrics-server-v0.3.6.tar.gz
 
修改metrics清单配置
cd /usr/local/src/k8s/kubernetes-sigs-metrics-server-d1f4f6f/deploy/1.8+
vim metrics-server-deployment.yaml
      containers:
      - name: metrics-server
        image: k8s.gcr.io/metrics-server-amd64:v0.3.6
        imagePullPolicy: Always
        command:
        - /metrics-server
        - --kubelet-insecure-tls
        - --kubelet-preferred-address-types=InternalIP
 
创建metrics
kubectl apply -f metrics-server-deployment.yaml