K8S-入门(一篇即可,持续更新~)

K8s

定位

Kubernetes(k8s)是一种开源的容器编排平台,可以帮助用户自动化部署、拓展和管理容器化应用程序。k8s提供了一种统一的容器编排、自动化部署和管理的机制,可以帮助用户快速构建、部署和管理云原生应用程序。K8S具有高可用性、易于拓展、灵活的部署选项、自动化操作等特点,广泛应用于云计算、大数据、人工智能等领域。

与docker区别联系

docker是一个开源的容器化平台,可以将应用程序和其依赖项打包成一个可移植的容器,实现了应用程序的跨平台和一致性管理;而K8S是一个开源的容器编排平台,可以自动化部署、拓展和管理docker容器。dockers是容器化技术的实现者,而k8s是容器编排的实现者。k8s可以管理多个docker容器,并通过自动化的方式进行容器的部署、伸缩、负载均衡、健康检查等操作,从而实现了大规模容器化应用程的管理和运维。

1.架构

Master,集群控制节点,负责整个集群的管理和控制

  1. kube-apiserver,提供了HTTP Rest接口的关键服务进程,k8s的唯一入口
  2. kube-controller-manager,K8S里所有资源对象的自动化控制中心,集群内各种资源Controller的核心管理者,针对每一种资源都有相应的Controller,保证其下管理的每个Controller所对应的资源始终处于期望状态
  3. kube-scheduler,负责资源调度(Pod调度)的进程,通过API Server的Watch接口监听新建Pod副本信息,并通过调度算法为该Pod选择一个最合适的Node
  4. etcd,K8S里的所有资源对象以及状态的数据都被保存在etcd中

Node,工作负载节点,每个Node都会被Master分配一些工作负载,当某个Node宕机时,其上的工作负载会被Master自动转移到其他节点上

  1. kubelet,负责Pod对应的容器的创建、启停等任务,同时与Master密切协作,实现集群管理的基本功能
  2. kube-proxy,实现Kubernetes Service的通信与负载均衡机制的重要组件
  3. Docker Engine,Docker引擎,负责本机的容器创建和管理工作

pod

  1. static pod,没被存放在K8S的etcd存储里,而是被存放在某个具体的Node上的一个具体文件中,并且只在此Node上启动、运行
  2. pod,一旦被创建,就会被放入etcd中存储,随后会被K8S的Master调度到某个具体的Node上并进行绑定(Binding),随后该Pod被对应的Node上的kubelet进程实例化成一组相关的Docker容器并启动

当Pod里的某个容器停止时,K8S会自动检测到这个问题并且重新启动这个Pod(重启Pod里的所有容器),如果Pod所在的Node宕机,就会将这个Node上的所有Pod重新调度到其他节点上

  1. 配置K8s

2.1关闭防火墙

setenforce 0

getenforce //查看selinux状态

systemctl stop firewalld

2.2 安装docker

yum install -y yum-utils

下载docker-ce.repo文件

yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

安装docker-ce软件

yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin -y

2.3关闭交换分区

确保每次开机都不启动swap

vi /etc/fstab

#/dev/mapper/centos-swap swap swap defaults 0 0

关闭本次swap

swapoff -a

查看交换分去状态

free -m

2.4修改hosts配置文件

cat >> /etc/hosts << EOF

192.168.45.202 k8s-master

192.168.45.198 k8s-node1

EOF

2.5修改内核参数

cat <<EOF >> /etc/sysctl.conf

net.bridge.bridge-nf-call-ip6tables = 1

net.bridge.bridge-nf-call-iptables = 1

net.ipv4.ip_nonlocal_bind = 1

net.ipv4.ip_forward = 1

vm.swappiness=0

EOF

sysctl -p 更新内核参数

2.6安装kubadm、kubctl、kublet

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,并且指定版本

yum install -y kubelet-1.23.6 kubeadm-1.23.6 kubectl-1.23.6

2.7部署master

每个机器部署的coredns

docker pull coredns/coredns:1.8.4

docker tag coredns/coredns:1.8.4 registry.aliyuncs.com/google_containers/coredns:v1.8.4

master初始化

kubeadm init

2.8将node加入集群

初始化后得到类似函数

kubeadm join 192.168.45.128:6443 --token ppogow.0decdlpj7agjnvmg --discovery-token-ca-cert-hash sha256:0ca1b4beec0905b508e4486587404f492f195b0efc5a33efc43ac09af1ee8849

kubectl get nodes

2.9安装网络插件 flannel/calico

(flannel相对比较简单,功能少,适合小的集群;

calico可以设置复杂的网络配置,安装配置比较复杂,适合大集群)

kubectl apply -f calico.yaml

查看节点装点是否ready

kubectl get nodes

2.10后续追加新节点

查看追加命令(可以在已在集群里面的节点里。history|grep join)

大多数是命令失效了。正常token有效时间23h,也可使用命令生成永久

master操作

kubeadm token create --ttl 0(永久token)

kubeadm token create(23htoken)

kubeadm token list

查看crt

openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'

新节点操作

克隆的既有非master节点,所以需要删除一些东西

systemctl stop kubectl

rm -rf /etc/kubernetes/*

systemctl start kubectl

kubeadm join 192.168.45.128:6443 --token bsixpz.ub708foba9w7sxnb --discovery-token-ca-cert-hash sha256:06bf3bb85040c4d9e2b3392a22112f331b9b1946495d9c578ff370df4813dd78

适当修改token、crt

master查看

kubectl get node

  1. 安装dashboard

kubectl apply -f dashboard.yaml

查看dashboard的状态

# kubectl get pods -n kubernetes-dashboard

查看dashboard前端的service

# kubectl get svc -n kubernetes-dashboard

修改service type类型变成NodePort

# kubectl edit svc kubernetes-dashboard -n kubernetes-dashboard

  1. 不经意

4.1dashboard没有数据

kubectl create serviceaccount dashboard -n default 创建新账户

kubectl create clusterrolebinding dashboard-admin -n default --clusterrole=cluster-admin --serviceaccount=default:dashboard

将集群绑定规则添加到您的仪表板帐户

kubectl get secret $(kubectl get serviceaccount dashboard -o jsonpath="{.secrets[0].name}") -o jsonpath="{.data.token}" | base64 --decode 获得token

4.2查看端口

kubectl get svc,pods -n kubernetes-dashboard

4.3问题

http://localhost:10248/healthz“: dial tcp [::1]:10248: connect: connection refused

vi /etc/docker/daemon.json

{

"exec-opts": ["native.cgroupdriver=systemd"],

"log-driver": "json-file",

"log-opts": {

"max-size": "100m"

},

"storage-driver": "overlay2",

"storage-opts": [

"overlay2.override_kernel_check=true"

],

"data-root": "/data/docker"

}

systemctl daemon-reload

systemctl restart docker

4.4删除服务、pod

查看创建成功,查看所有po

# kubectl get po --all-namespaces

查看现有的所有服务

# kubectl get svc --all-namespaces

删除现有的dashboard服务

# kubectl delete service kubernetes-dashboard --namespace=kubernetes-dashboard

# kubectl delete service dashboard-metrics-scraper --namespace=kubernetes-dashboard

删除现有的dashboard pod

# kubectl delete deployment kubernetes-dashboard --namespace=kubernetes-dashboard

# kubectl delete deployment dashboard-metrics-scraper --namespace=kubernetes-dashboard

一、强制删除pod

$ kubectl delete pod <your-pod-name> -n <name-space> --force --grace-period=0

解决方法:加参数 --force --grace-period=0,grace-period表示过渡存活期,默认30s,在删除POD之前允许POD慢慢终止其上的容器进程,从而优雅退出,0表示立即终止POD

二、强制删除pv、pvc

$ kubectl patch pv xxx -p '{"metadata":{"finalizers":null}}'

$ kubectl patch pvc xxx -p '{"metadata":{"finalizers":null}}'

直接删除k8s etcd数据库中的记录!

三、强制删除ns

在尝试以下命令强制删除也不好使:

$ kubectl delete ns <terminating-namespace> --force --grace-period=0

搭建参考

dashboardK8S教程(5)Dashboard的安装与使用_k8s dashboard使用教程_weixin_42073629的博客-CSDN博客

k8s

k8s的安装部署_k8s部署_Wangsh@的博客-CSDN博客

  1. 基本操作

# 创建一次deployment 选用tomcat镜像

kubectl create deployment mytomcat --image=tomcat:latest

# 获取当前命名空间内的部署

kubectl get deployment

# 删除deployment

kubectl delete deployment <deployment名称>

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值