K8S-介绍及kubeadm安装部署

kubernetes介绍

容器编排部署工具:
docker三剑客:
		(1)docker machine
		(2)docker compose
		(3)docker swarm 
mesos+marathon:
		(1)mesos作用于分布式计算过程中,对计算机资源进行管理和分配
		(2)marathon基于mesos的私有PaaS,实现了服务发现和负载均衡、为部署提供REST API服务、授权和SSL、配置约束等功能。
		(3)mesos和Marathon的关系:mesos如操作系统的内核,负责资源调度,marathon类比服务管理系统,用来管理应用的状态信息。marathon将应用程序部署为长时间运行的mesos任务。
kubernetes
		Kubernetes 是一个可移植的、可扩展的开源平台,用于管理容器化的工作负载和服务,可促进声明式配置和自动化。
		Kubernetes 拥有一个庞大且快速增长的生态系统。Kubernetes 的服务、支持和工具广泛可用。

kubernetes功能

• k8s能方便地管理跨机器运行容器化的应用 
• 提供应用部署、维护、扩展机制 
• 集群管理、安全防护、准入机制、 应用支撑、服务注册、服务发现、智能负载均衡、故障发现、自我修 复、服务滚动升级、在线扩容、资源配额管理 
• 使用Docker对应用程序包装、实例化、运行 
• 以集群的方式运行、管理跨机器的容器
• 解决Docker跨机器容器之间的通讯问题 
• k8s的自我修复机制使得容器集群总是运行在用户期望的状态

k8s集群的安装部署

基本条件:
1 ) 集群中所有机器之间网络互通。
2 ) 可以访问外网,需要拉取镜像。
3 ) 禁止swap分区,可选。
4 ) 集群中所有机器时间同步

k8s-master与k8s-node配置:

[root@k8s-master ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.16.55 k8s-master
192.168.16.44 k8s-node01
[root@k8s-master ~]# systemctl stop firewalld
[root@k8s-master ~]# sed -i '/SELINUX= /cSELINUX=disabled' /etc/selinux/config 
[root@k8s-master ~]# setenforce 0
[root@k8s-master ~]# swapoff -a #临时
[root@k8s-master ~]# free -m
              total        used        free      shared  buff/cache   available
Mem:           5805         196        5468          11         140        5407
Swap:             0           0           0
[root@k8s-master ~]# sed -i '/\/dev\/mapper\/centos-swap/ s/^/#/' /etc/fstab
# 永久
[root@k8s-master ~]# vim /etc/fstab 

[root@k8s-master ~]# yum install bash-completion wget tree psmisc net-tools vim lrzsz dos2unix -y
[root@k8s-master ~]# cat >> /etc/sysctl.d/k8s.conf << EOF
> net.bridge.bridge-nf-call-ip6tables = 1
> net.bridge.bridge-nf-call-iptables = 1
> net.ipv4.ip_forward = 1
> vm.swappiness = 0
> EOF
[root@k8s-master ~]# modprobe br_netfilter
[root@k8s-master ~]# lsmod | grep br_netfilter
br_netfilter           22256  0 
bridge                151336  1 br_netfilter
[root@k8s-master ~]# sysctl -p /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
vm.swappiness = 0

[root@k8s-master ~]# yum -y install ipset ipvsadm
[root@k8s-master ~]# 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

[root@k8s-master ~]# chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack_ipv4
#授权、运行、检查是否加载

安装docker-ce

[root@k8s-master ~]yum install -y yum-utils device-mapper-persistent-data lvm2
安装必要的一些系统工具

[root@k8s-master ~]yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
添加软件源信息

[root@k8s-master ~]yum makecache fast
[root@k8s-master ~]yum makecache fast
更新并安装Docker-CE

[root@k8s-master ~]yum list docker-ce.x86_64 --showduplicates | sort -r
[root@k8s-master ~]# docker version
查看docker-ce版本


修改docker-ce服务配置文件 
修改其目的是为了后续使用/etc/docker/daemon.json来进行更多配置

[root@k8s-master ~]vim /usr/lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd 
#如果原文件此行后面 有-H选项,请删除-H(含)后面所有内容。 
注意:有些版本不需要修改,请注意观察,本文安装版本就不需要修改。

#在/etc/docker/daemon.json添加如下内容
[root@k8s-master ~]mkdir -p /etc/docker 
[root@k8s-master ~]vim /etc/docker/daemon.json 
{
    
     
	"exec-opts":["native.cgroupdriver=systemd"] 
}

[root@k8s-master ~]# systemctl enable --now docker.service
[root@k8s-master ~]# systemctl daemon-reload
[root@k8s-master ~]# systemctl restart docker
启动服务

使用kubeadm安装K8S集群

1、配置kubernetes仓库
[root@k8s-master ~]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=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

2、安装docker、kubelet、kubeadm、kubectl
[root@k8s-master ~] yum -y install kubeadm kubelet kubectl
kubelet:负责管理pods和它们上面的容器,维护容器的生命周期
kubeadm:安装K8S工具
kubectl:K8S命令行工具

3、主要配置kubelet,如果不配置可能会导致k8s集群无法启动。
[root@k8s-master ~]vim /etc/sysconfig/kubelet
KUBELET_EXTRA_ARGS="--cgroup-driver=systemd"

4、启动服务
[root@k8s-master ~]systemctl enable kubelet.service
#设置为开机自启动即可,由于没有生成配置文件,集群初始化后自动启动。

初始化kubernetes master节点

1、查看安装的docker版本
[root@k8s-master ~]# docker version

2、使用kubeadm init初始化(注意重新开个会话窗口,该命令含有之后操作的命令)
[root@k8s-master ~]#kubeadm init  --apiserver-advertise-address=192.168.16.55  --token-ttl 0  --image-repository registry.aliyuncs.com/google_containers  --kubernetes-version v1.19.3  --service-cidr=10.96.0.0/16  --pod-network-cidr=10.244.0.0/16

3、准备集群管理文件,初始化命令成功后,创建.kube目录
[root@k8s-master ~]# mkdir -p $HOME/.kube
[root@k8s-master ~]# cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[root@k8s-master ~]# chown $(id -u):$(id -g) $HOME/.kube/config

4、验证
[root@k8s-master ~]# ss -nutlp | grep :6443
tcp    LISTEN     0      128    [::]:6443               [::]:*                   users:(("kube-apiserver",pid=9933,fd=7))

5、使用kubectl命令查询集群信息
查询组件状态信息
[root@k8s-master ~]# kubectl get cs
Warning: v1 ComponentStatus is deprecated in v1.19+
NAME                 STATUS      MESSAGE                                                                                       ERROR
scheduler            Unhealthy   Get "http://127.0.0.1:10251/healthz": dial tcp 127.0.0.1:10251: connect: connection refused   
controller-manager   Unhealthy   Get "http://127.0.0.1:10252/healthz": dial tcp 127.0.0.1:10252: connect: connection refused   
etcd-0               Healthy     {
    
    "health":"true"}      
发现两处报错

解决办法:
针对通过kubeadm安装的k8s集群获取kube-scheduler和kube-controller-manager组件状态异常处理,kubernetes版本:v1.19.3 确认kube-scheduler和kube-controller-manager组件配置是否禁用了非安全端口配置文件路径:
修改:/etc/kubernetes/manifests/kube-scheduler.yaml、
     /etc/kubernetes/manifests/kube-controller-manager.yaml 
可以去掉--port=0这个设置,
然后重启systemctl restart kubelet,
再次检查正常
[root@k8s-master ~]# vim /etc/kubernetes/manifests/kube-scheduler.yaml
[root@k8s-master ~]# vim /etc/kubernetes/manifests/kube-controller-manager.yaml
[root@k8s-master ~]# kubectl get cs
Warning: v1 ComponentStatus is deprecated in v1.19+
NAME                 STATUS    MESSAGE             ERROR
controller-manager   Healthy   ok                  
scheduler            Healthy   ok                  
etcd-0               Healthy   {
    
    "health":"true"}  

6、查询集群节点信息(因为还没有部署好flannel,所以节点显示为NotReady)
[root@k8s-master ~]# kubectl get nodes
NAME         STATUS     ROLES    AGE   VERSION
k8s-master   NotReady   master   24m   v1.19.4

7、部署网络插件calico
(1)可以将下载好的镜像导入
[root@k8s-master ~]# docker load -i calico-cni.tar
[root@k8s-master ~]# docker load -i calico-node.tar 
[root@k8s-master ~]# docker load -i pod2daemon-flexvol.tar
[root@k8s-master ~]# docker load -i kube-controllers.tar
[root@k8s-master ~]# kubectl get ns
NAME              STATUS   AGE
default           Active   44m
kube-node-lease   Active   44m
kube-public       Active   44m
kube-system       Active   44m

(2)修改calico资源镜像
添加以下两行,增加到606行后面,由于calico自身网络发现机制有问题,因为需要修改calico使用的物理网卡
[root@k8s-master ~]# ip a
查看自己物理网卡
[root@k8s-master ~]# vim calico.yml
607             - name: IP_AUTODETECTION_METHOD
608               value: "interface=ens.*"

(3)在应用caclico资源清单文件之前,需要把calico所有的镜像导入到node节点中。
复制镜像到其他节点
[root@k8s-master ~]# scp calico* pod2daemon-flexvol.tar kube-controllers.tar k8s-node01:/root

结点导入镜像
[root@k8s-node01 ~]# docker load -i calico-cni.tar
[root@k8s-node01 ~]# docker load -i calico-node.tar 
[root@k8s-node01 ~]# docker load -i pod2daemon-flexvol.tar
[root@k8s-node01 ~]# docker load -i kube-controllers.tar

8、部署calico(master与node有配置)
[root@k8s-master ~]# kubectl apply -f calico.yml

9、查询集群节点信息(节点显示为Ready)
[root@k8s-master ~]# kubectl get nodes
NAME         STATUS   ROLES    AGE   VERSION
k8s-master   Ready    master   61m   v1.19.4

初始化kubernetes node节点

该命令是master初始化完成后,下边有提示的操作命令
[root@k8s-node01 ~]#kubeadm join 192.168.16.55:6443 --token 88913n.ztx29esfmpdlf8qs \
    --discovery-token-ca-cert-hash sha256:257735362b59d17a552266d463cc67fe86178a8aa02acd92982a3a8ca3d00ff7

kubernetes master验证

查询节点的镜像
[root@k8s-master ~]# kubectl get nodes
NAME         STATUS     ROLES    AGE   VERSION
k8s-master   Ready      master   21m   v1.19.4
k8s-node01   NotReady   <none>   34s   v1.19.4

[root@k8s-master ~]#  kubectl get cs
Warning: v1 ComponentStatus is deprecated in v1.19+
NAME                 STATUS    MESSAGE             ERROR
controller-manager   Healthy   ok                  
scheduler            Healthy   ok                  
etcd-0               Healthy   {
    
    "health":"true"}

[root@k8s-master ~]#  kubectl cluster-info
Kubernetes master is running at https://192.168.16.55:6443
KubeDNS is running at https://192.168.16.55:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy

To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.

kube-proxy 开启 ipvs

[root@k8s-master ~]# kubectl get configmap kube-proxy -n kube-system -o yaml > kube-proxy-configmap.yaml
[root@k8s-master ~]#  sed -i 's/mode: ""/mode: "ipvs"/' kube-proxy-configmap.yaml
[root@k8s-master ~]# kubectl apply -f kube-proxy-configmap.yaml
[root@k8s-master ~]# rm -f kube-proxy-configmap.yaml
[root@k8s-master ~]# kubectl get pod -n kube-system | grep kube-proxy | awk '{system("kubectl delete pod "$1" -n kube-system")}'
[root@k8s-master ~]# kubectl get pods -n kube-system

在k8s-master上部署 kubernetes-dashboard

yaml文件地址:https://github.com/pythonTaotao/kubernetes/tree/master/dashboard
1、下载yaml文件
[root@k8s-master ~]# wget -c https://github.com/pythonTaotao/kubernetes/blob/master/dashboard/dashboard-adminuser.yaml

2、修改node为NodePort模式
[root@k8s-master ~]# vim kubernetes-dashboard.yaml 
kind: Service
apiVersion: v1
metadata:
  labels:
    k8s-app: kubernetes-dashboard
  name: kubernetes-dashboard
  namespace: kubernetes-dashboard
spec:
  type: NodePort   # 增加内容
  ports:
    - port: 443
      targetPort: 8443
      nodePort: 30000  # 增加内容
  selector:
    k8s-app: kubernetes-dashboard
  type: NodePort
---

3、安装dashboard
[root@k8s-master ~]# kubectl apply -f kubernetes-dashboard.yaml
[root@k8s-master ~]# kubectl get pods -A -o wide | grep kubernetes-dashboard
kubernetes-dashboard   dashboard-metrics-scraper-6f5d46bdf4-qzxk9   1/1     Running   0          63s   10.224.85.194    k8s-node01   <none>           <none>
kubernetes-dashboard   kubernetes-dashboard-59b4cc6b65-bp7zw        1/1     Running   0          63s   10.224.85.193    k8s-node01   <none>           <none>

4、创建dashboard管理用户
[root@k8s-master ~]# kubectl apply -f dashboard-adminuser.yaml

[root@k8s-master ~]#  kubectl -n kubernetes-dashboard describe secret $(kubectl -n kubernetes-dashboard get secret | grep admin-user | awk '{print $1}') | awk '/token:/ {print $2}'
eyJhbGciOiJSUzI1NiIsImtpZCI6ImZ1bGk4OXJrLWdZdEVEVnUxLTF5N2FzZjBXV0hWdFN3YmpKUkJnUVJYclUifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlcm5ldGVzLWRhc2hib2FyZCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJhZG1pbi11c2VyLXRva2VuLW45ZnFmIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQubmFtZSI6ImFkbWluLXVzZXIiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC51aWQiOiIyMDM0MmE3ZS04MTU5LTRkZTQtYmIwNS04Y2NjY2FjYjQwYTMiLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6a3ViZXJuZXRlcy1kYXNoYm9hcmQ6YWRtaW4tdXNlciJ9.QCp56y9PxEvl8vRWIh7Ce4ctqfhIP8J_o-muuj3y96zeLeamZJ62TWmhxWUSboBUQgMNayxglBn5dUSVw0HbiIp0H6-_LvRESYvgDiaEbiCvfP5CmYoSMdEZ_n0fqNNv3cGKg8t-m4swGy_1qgLyx79egO31SQUm1r_jf0BFF-KCMtSNAKnhycBBE6hfiDfCLJamuMsYwHLIOIsfeGK_iULdNcpRfDQrePIWr9SJfW2SUMqYoFA4ja5MhHbpu3BKND-gsfps0zql_v16Bdr4Qg5dltiUvhD1RcF_E3REl58kmpAWjR9wQGs8y2HpbgWtuvsUGb6Z2PC0pku4Y16HBA

web登录

https://192.168.16.55:30000
输入token登录后
在这里插入图片描述
可参考Kuboard管理工具,
https://kuboard.cn/

猜你喜欢

转载自blog.csdn.net/m0_46289868/article/details/109521573