K8s(kubernetes)基础知识

1.K8s(kubernetes)基础特性

1.1服务发现和负载均衡

        k8s可以使用DNS名称或者自己IP地址公开容器,如果进入容器的流量很大,k8s可负载均衡并分配网络流量,从而使部署稳定。

1.2存储编排

k8s允许你自动挂载你的存储系统,例如本地存储,公共云提供等

1.3自动部署和回滚

        你可以使用Kubernetes描述已部署容器的所需状态,它可以以受控的速率将实际状况更改为期望状态。例如,你可以自动化Kubernetes来为你的部署创建新容器,删除现有容器并将它们的所有资源用于新容器。

1.4自动完成装箱计算

        Kubernetes 允许你指定每个容器所需CPU和内存(RAM)。当容器指定了资源请求时,Kubernetes可以做出更好的决策来管理容器的资源。

1.5自我修复

        Kubernetes重新启动失败的容器、替换容器、杀死不响应用户定义的运行状况检查的容器,并且在准备好服务之前不将其通告给客户端。

1.6密钥与配置管理

Kubernetes允许你存储和管理敏感信息,例如密码、OAuth令牌和ssh密钥。你可以在不重 建容器镜像的情况下部署和更新密钥和应用程序配置,也无需在堆栈配置 中暴露密钥。

2.k8s架构

1.工作方式

通过集群的方式进行工作

Kubernetes Cluster = N Master Node+ N Worker Node: N主节点+N工作节点; N>=1

高可用集群:master节点挂了,其余的节点会进行选举出master主节点。

搭建k8s集群

1.master节点和工作节点都要安装docker环境,k8s只是一个容器编排工具,需要提供docker容器环境。

为了使用方便可以手动设置主机名:set-hostname k8s-master(设置一次永久生效)

内网互信:禁用交换分区。为了保证kubelet正常工作,你必须禁用交换分区

#各个机器设置自己的域名
hostnamectl set -hostname xxXx
#将SELinux 设置为permissive 模式(相当于将其禁用)
sudo setenforce 日
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
#关闭swap
swapoff -a
sed -ri 's/.*swap. */#&/' /etc/fstab
​
#允许iptables"检 查桥接流量 k8s官方要求的
cat <<EOF| sudo tee /etc/modules- load . d/k8s. conf
br_ netfilter
EOF
cat <<EOF| sudo tee /etc/sysct1.d/k8s. conf
net. bridge . bridge-nf-call-ip6tables = 1
net . bridge. bridge-nf-call-iptables = 1
EOF
sudo sysctl --system

2.安装kubelet,kubeadm,kubectl

#k8s去哪里下载的地址
cat << EOF | sudo tee /etc/yum. repos . d/kubernetes . repo
[kubernetes]
name= Kubernetes
baseurl=http://mirrors。aliyun. com/ kubernetes/yum/repos/kubernetes-e17-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
exclude=kubelet kubeadm kubectl
EOF
​
# 安装三大件
sudo yum install -y kubelet-1.20.9 kubeadm-1.20.9 kubect1-1.20.9 --
disableexcludes=kubernetes
# 立刻启动kubelet
sudo systemctl enable hs-now kubelet
#查看 kubelet状态
systemd status kubelet  #发现一会运行一会停止 在监控

2.使用kubeadm引导集群

sudo tee ./images.sh <<-'EOF'
#!/bin/bash
images=(
kube-apiserver:v1.20.9
kube-proxy:v1.20.9
kube- controller-manager:v1.20.9
kube-scheduler:v1.20.9
coredns:1.7.0
etcd:3.4.13-0
pause:3.2
)
for imageName in ${images[@]} ; do
docker pu1l registry.cn-hangzhou. aliyuncs. com/1fy_ k8s_ images/$imageName
done
EOF
​
#chmod +x  给这个文件赋予权限 并执行
chmod +x ./images.sh && ./images.sh 

2.初始化主节点

#所有机器添加master城名映射(10.140.122.4IP地址是master内网地址 cluster-endpoint是域名 所有节点执行这条命令 如果能ping通主节点证明成功)
echo "10.140.122.4 cluster-endpoint" 》> /etc/hosts
​
#主节点执行下面的命令
#主节点初始化(注意:下面的ip是masterip,域名要和上面配置的一致 cluster-endpoint)
kubeadm init \
--apiserver-advertise-address=10.140.122.4 \
--control-plane -endpoint=cluster-endpoint \
-- image-repository registry . cn-hangzhou. aliyuncs.com/1fy_ k8s_ images \
--kubernetes-version v1.20.9 \
--service-cidr=10.96.0.0/16 \
--pod-network-cidr=192.168.0.0/16
​
注意:所有网络范围不重叠不能与master重叠(所以不要改)
--service-cidr=10.96.0.0/16 \
--pod-network-cidr=192.168.0.0/16
​
192.168.0.0/16所有的pod应用分配的ip都是在这个范围。集群中的任意一个机器以及应用都能通过pod分配的ip来访问这个(集群内,外网不行 需要暴露端口的方式)

3.补充知识

kubectl get node  #获取所有节点信息
​
#令牌过期可以使用下面的命令重新生成 (加入节点)
kubectl token create --print-join-command  #生成新的令牌

4.安装可视化界面dashboa

kubect1 apply -f
https://raw. githubusercontent.com/ kubernetes/dashboard/v2.3.1/aio/dep1oy/recommended.yaml
​
#手动下载资源(github国外网站)
wget  https://raw. githubusercontent.com/ kubernetes/dashboard/v2.3.1/aio/dep1oy/recommended.yaml
kubectl apply -f recommended.yaml
​
vi dashboard.yaml  #创建文件并生成
​
#设置端口:
kubectl edit svc kubernetes-dashboard -n kubernetes -dashboard
type: ClusterlP改玉type: NodePort  #暴露端口
kubectl get svc -A| grep kubernetes - dashboard
#找到端口,在安全组放行

4.重要概念:

pod ->运行中的应用叫做pod
#获取命名空间
kubectl get ns(namespace)
#创建命名空间
kubectl create ns hello
#删除命名空间
kubectl delete ns hello
默认的命名空间不能删除,可以删除自己创建的命名空间
​
文件的方式创建
apiVersion: v1
kind: Namespace
metadata:
    name:hello
kubectl -f apply *.yaml

5.pod的相关概念(k8s中运行的应用叫做pod)

运行中的一组容器,Pod是k8s中应用的最小单位,(一个pod可以部署多个容器,但是一个pod推荐只安装一个容器)
​
容器化运行环境(CRI: Container Runtime Interface)
​
创建pod
kubctl run mynginx --image=nginx #(mynginx是起个名字 --image=nginx镜像 pod里面是容器,这个容器是nginx)
#查看default 名称空间的pod 
kubectl get pod
#查看所有的pod
kubectl get pod -a
#查看pod描述(k8s集群排错)
kubctl describe pod  你自己的pod的名字
#删除pod
kubctl delete pod  pod名字
#查看pod的运行日志
kubctl logs pod名字
​
#每个pod -k8s都会分配一个ip(看到每个pod的信息)
kubectl get pod -owide
#使用pod的ip+pod里面运行容器的端口就可以访问到
例如pod的nginx的容器:curl ip:端口(curl 192.168.169.136:80)
​
#进到pod的容器里面
kubctl exec -it mynginx -- /bin/bash
​
​

5.1多容器的pod

每一个pod都会有一个唯一IP进行访问

创建多个容器 :里面的name不能一样

apiVersion: v1 #版本
kind: Pod  #pod
metadata :
  labels: #标签
    run: myapp
  name: myapp  #pod的名称
#容器详情 每一个image前面用 "-"多个也是这样
spec: 
  containers:
    - image: nginx  #nginx镜像 最新版本
      name: nginx   #nginx名字
    - image: tomcat:8.5.68  # tomcat:8.5.68 镜像tomcat:8.5.68指定版本
      name: tomcat  #tomcat名字

Restarts : pod重启几次了

6.Deployment

#自愈能力(nginx启动3个 多副本(多节点))
kubectl create deployment my-deploy --image=nginx replicas=3
kubectl get deploy  # 获取deployment
kubectl  delete deploy my-deploy
​
扩缩容( scale)
kubectl scale --replicas=5 deployment/my-deploy
#监控(1s打印一次)
watch -n 1 kubectl get pod
​
也可以通过修改yaml文件
kubectl edit deploy my-deploy
#查看这些机器都部署在哪台机器
kubectl get pod -owide
可以手动设置自愈的时间
​
#Deployment 滚动更新(灰度上线)
kubectl set image deployment/my-deploy nginx=nginx:1.16.1 --record
​
#版本回退
kubectl rollout history deployment/my-deploy  #查看所有发布的版本
kubectl rollout undo deploy/my-deploy --to-revision=1 #回到版本1

重点基础知识:

Deployment:无状态应用部署,比如微服务,提供多副本等功能
StatefulSet:有状态应用部署 ,比如redis,提供稳定的存储、网络等功能
DaemonSet:守护型应用部署,比如日志收集组件,在每个机器都运行一份
Job/CronJob:定时任务部署,比如垃圾清理组件, 可以在指定时间运行

3.服务发现:

# 集群内部访问
kubectl expose deploy my-deploy --port=8000 --target-port=80 --type=ClusterIP
​
# 集群外部也可以访问(外网也可以)
kubectl expose deploy my-deploy --port=8000 -- target-port=80 --type=NodePort
​
​
Ingress网关(本质上是一个nginx) https http
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值