做外国订单有什么网站,做网站得每年续费吗,安通建设有限公司网站,网站建设文化代理商学习Kubernetes第一天 k8s-11、什么是Kubernetes2、配置Kubernetes2.1、准备三台全新的虚拟机2.2、关闭防火墙和SElinux2.3、修改主机名2.4、升级操作系统(三台一起操作)2.5、配置主机hosts文件#xff0c;相互之间通过主机名互相访问2.6、配置master和node之间的免密通道2.7、… 学习Kubernetes第一天 k8s-11、什么是Kubernetes2、配置Kubernetes2.1、准备三台全新的虚拟机2.2、关闭防火墙和SElinux2.3、修改主机名2.4、升级操作系统(三台一起操作)2.5、配置主机hosts文件相互之间通过主机名互相访问2.6、配置master和node之间的免密通道2.7、关闭交换分区swap提升性能(三台一起操作)2.8、为什么要关闭swap交换分区2.9、修改机器内核参数(三台一起操作)2.10、配置阿里云的repo源(三台一起)2.11、配置时间同步(三台一起) 3、安装docker服务(三台一起)3.1、安装docker的最新版本3.2、配置镜像加速器 4、继续配置Kubernetes4.1、安装初始化k8s需要的软件包(三台一起)4.2、kubeadm初始化k8s集群4.3、基于kubeadm.yaml文件初始化k8s4.4、改一下node的角色为worker4.5、安装网络插件 5、一些基本的命令5.1、kubectl get namespace (命名空间)kubectl get node5.2、kubectl get pod 6、pod是什么?7、k8s中的组件7.1、在master上跑哪些组件---运行哪些程序7.2、在node上跑哪些组件---运行哪些程序 8、启动nginx的pod k8s-1
1、什么是Kubernetes
Kubernetes, also known as K8s, is an open-source system for automating deployment, scaling, and management of containerized applications. Kubernetes也称为 K8s是一个用于自动化部署、扩展和管理容器化应用程序的开源系统。 docker中也有一个容器编排工具: compose
2、配置Kubernetes
2.1、准备三台全新的虚拟机
控制节点master192.168.182.133工作节点node1192.168.182.134工作节点node2192.168.182.135
把ip地址都改为静态的
2.2、关闭防火墙和SElinux
[rootlocalhost ~]# sed -i s/SELINUXenforcing/SELINUXdisabled/g /etc/selinux/config
[rootlocalhost ~]# service firewalld stop
Redirecting to /bin/systemctl stop firewalld.service
[rootlocalhost ~]# systemctl disable firewalld
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[rootlocalhost ~]# reboot2.3、修改主机名
[rootlocalhost ~]# hostnamectl set-hostname master bash
[rootmaster ~]# [rootlocalhost ~]# hostnamectl set-hostname node-1 bash
[rootnode-1 ~]# [rootlocalhost ~]# hostnamectl set-hostname node-2 bash
[rootnode-2 ~]# 2.4、升级操作系统(三台一起操作)
[rootmaster ~]# yum update -y2.5、配置主机hosts文件相互之间通过主机名互相访问
修改每台机器的/etc/hosts文件增加如下三行:
192.168.182.133 master
192.168.182.134 node-1
192.168.182.135 node-2看一下
[rootmaster ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.182.133 master
192.168.182.134 node-1
192.168.182.135 node-2
[rootmaster ~]# 2.6、配置master和node之间的免密通道
ssh-keygen
cd /root/.ssh/
ssh-copy-id -i id_rsa.pub rootnode-1
ssh-copy-id -i id_rsa.pub rootnode-2[rootmaster ~]# ssh-keygen #生成密钥对,一路回车
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Created directory /root/.ssh.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:DoRBMmIAstd0QrtKG0QB2VVkRAnppI35KRV4RQvQJc rootmaster
The keys randomart image is:
---[RSA 2048]----
|Oo.Bo |
|o* # #E. |
|o B X . |
| o o . |
| o . . S |
| . o |
| o . |
| |
| |
----[SHA256]-----[rootmaster ~]# cd /root/.ssh/ #进入 /root/.ssh/目录
[rootmaster .ssh]# ls
id_rsa id_rsa.pub
[rootmaster .ssh]# ssh-copy-id -i id_rsa.pub rootnode-1
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: id_rsa.pub
The authenticity of host node-1 (192.168.182.134) cant be established.
ECDSA key fingerprint is SHA256:VAXkYru3rBQHrgs94AB7LO819O7DBzXdUTGTLpNAak.
ECDSA key fingerprint is MD5:ab:bd:54:33:73:df:6b:16:48:59:15:05:c9:24:af:07.
Are you sure you want to continue connecting (yes/no)? yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
rootnode-1s password: Number of key(s) added: 1Now try logging into the machine, with: ssh rootnode-1
and check to make sure that only the key(s) you wanted were added.[rootmaster .ssh]# ssh-copy-id -i id_rsa.pub rootnode-2
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: id_rsa.pub
The authenticity of host node-2 (192.168.182.135) cant be established.
ECDSA key fingerprint is SHA256:9MHFCfV2pm4w8bdJKG/bPKZ543YQ/LwQQAYMnEbGE18.
ECDSA key fingerprint is MD5:2a:e4:f6:73:8e:21:02:88:1b:6d:e3:e9:89:df:de:5f.
Are you sure you want to continue connecting (yes/no)? yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
rootnode-2s password: Number of key(s) added: 1Now try logging into the machine, with: ssh rootnode-2
and check to make sure that only the key(s) you wanted were added.[rootmaster .ssh]# 2.7、关闭交换分区swap提升性能(三台一起操作)
[rootmaster .ssh]# swapoff -a永久关闭注释swap挂载给swap这行开头加一下注释
[rootmaster .ssh]# vim /etc/fstab
#/dev/mapper/centos-swap swap swap defaults 0 02.8、为什么要关闭swap交换分区
Swap是交换分区如果机器内存不够会使用swap分区但是swap分区的性能较低k8s设计的时候为了能提升性能默认是不允许使用交换分区的。Kubeadm初始化的时候会检测swap是否关闭如果没关闭那就初始化失败。如果不想要关闭交换分区安装k8s的时候可以指定–ignore-preflight-errorsSwap来解决。
2.9、修改机器内核参数(三台一起操作)
[rootmaster .ssh]# modprobe br_netfilter
[rootmaster .ssh]# echo modprobe br_netfilter /etc/profile
[rootmaster .ssh]# cat /etc/sysctl.d/k8s.conf EOFnet.bridge.bridge-nf-call-ip6tables 1net.bridge.bridge-nf-call-iptables 1net.ipv4.ip_forward 1EOF
[rootmaster .ssh]# 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
[rootmaster .ssh]# 2.10、配置阿里云的repo源(三台一起)
yum install -y yum-utilsyum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repoyum install -y yum-utils device-mapper-persistent-data lvm2 wget net-tools nfs-utils lrzsz gcc gcc-c make cmake libxml2-devel openssl-devel curl curl-devel unzip sudo ntp libaio-devel wget vim ncurses-devel autoconf automake zlib-devel python-devel epel-release openssh-server socat ipvsadm conntrack ntpdate telnet ipvsadm配置安装k8s组件需要的阿里云的repo源vim /etc/yum.repos.d/kubernetes.repo
[kubernetes]
nameKubernetes
baseurlhttps://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled1
gpgcheck02.11、配置时间同步(三台一起)
[rootmaster ~]# yum install ntpdate -y
[rootmaster ~]# ntpdate cn.pool.ntp.org3 Mar 10:15:12 ntpdate[73056]: adjust time server 84.16.67.12 offset 0.007718 sec
[rootmaster ~]# 加入计划任务
[rootmaster ~]# crontab -e
no crontab for root - using an empty one
crontab: installing new crontab
[rootmaster ~]# crontab -l
* */1 * * * /usr/sbin/ntpdate cn.pool.ntp.org
[rootmaster ~]#
[rootmaster ~]# service crond restart
Redirecting to /bin/systemctl restart crond.service
[rootmaster ~]# 3、安装docker服务(三台一起)
3.1、安装docker的最新版本
[rootmaster ~]# sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y[rootmaster ~]# systemctl start docker systemctl enable docker.service
Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.
您在 /var/spool/mail/root 中有新邮件
[rootmaster ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[rootmaster ~]# 3.2、配置镜像加速器
[rootmaster ~]# vim /etc/docker/daemon.json
{registry-mirrors:[https://rsbud4vc.mirror.aliyuncs.com,https://registry.docker-cn.com,https://docker.mirrors.ustc.edu.cn,https://dockerhub.azk8s.cn,http://hub-mirror.c.163.com],exec-opts: [native.cgroupdriversystemd]
} [rootmaster ~]# [rootmaster ~]# systemctl daemon-reload
您在 /var/spool/mail/root 中有新邮件
[rootmaster ~]# systemctl restart docker
[rootmaster ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[rootmaster ~]# 4、继续配置Kubernetes
4.1、安装初始化k8s需要的软件包(三台一起)
k8s 1.24开始就不再使用docker作为底层的容器运行时软件采用containerd作为底层的容器运行时软件
[rootmaster ~]# yum install -y kubelet-1.20.6 kubeadm-1.20.6 kubectl-1.20.6Kubeadm: kubeadm是一个工具用来初始化k8s集群的
kubelet: 安装在集群所有节点上用于启动Pod的
kubectl: 通过kubectl可以部署和管理应用查看各种资源创建、删除和更新各种组件
[rootmaster ~]# systemctl enable kubelet
Created symlink from /etc/systemd/system/multi-user.target.wants/kubelet.service to /usr/lib/systemd/system/kubelet.service.
您在 /var/spool/mail/root 中有新邮件
[rootmaster ~]# 4.2、kubeadm初始化k8s集群
把初始化k8s集群需要的离线镜像包上传到master、node-1、node-2机器上手动解压 利用xftp传到master上的root用户的家目录下
再利用scp传递到node-1和node-2上(之前建立过免密通道)
[rootmaster ~]# scp k8simage-1-20-6.tar.gz rootnode-1:/root
k8simage-1-20-6.tar.gz 100% 1033MB 129.0MB/s 00:08
[rootmaster ~]# scp k8simage-1-20-6.tar.gz rootnode-2:/root
k8simage-1-20-6.tar.gz 100% 1033MB 141.8MB/s 00:07
[rootmaster ~]# 导入镜像(三台一起)
[rootmaster ~]# docker load -i k8simage-1-20-6.tar.gz生成一个yml文件(在master上操作)
[rootmaster ~]# kubeadm config print init-defaults kubeadm.yaml
您在 /var/spool/mail/root 中有新邮件
[rootmaster ~]# ls
anaconda-ks.cfg k8simage-1-20-6.tar.gz kubeadm.yaml
[rootmaster ~]# cat kubeadm.yaml
apiVersion: kubeadm.k8s.io/v1beta2
bootstrapTokens:
- groups:- system:bootstrappers:kubeadm:default-node-tokentoken: abcdef.0123456789abcdefttl: 24h0m0susages:- signing- authentication
kind: InitConfiguration
localAPIEndpoint:advertiseAddress: 1.2.3.4bindPort: 6443
nodeRegistration:criSocket: /var/run/dockershim.sockname: mastertaints:- effect: NoSchedulekey: node-role.kubernetes.io/master
---
apiServer:timeoutForControlPlane: 4m0s
apiVersion: kubeadm.k8s.io/v1beta2
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controllerManager: {}
dns:type: CoreDNS
etcd:local:dataDir: /var/lib/etcd
imageRepository: k8s.gcr.io
kind: ClusterConfiguration
kubernetesVersion: v1.20.0
networking:dnsDomain: cluster.localserviceSubnet: 10.96.0.0/12
scheduler: {}
[rootmaster ~]# 修改内容
[rootmaster ~]# cat kubeadm.yaml
apiVersion: kubeadm.k8s.io/v1beta2
bootstrapTokens:
- groups:- system:bootstrappers:kubeadm:default-node-tokentoken: abcdef.0123456789abcdefttl: 24h0m0susages:- signing- authentication
kind: InitConfiguration
localAPIEndpoint:advertiseAddress: 192.168.182.133bindPort: 6443
nodeRegistration:criSocket: /var/run/dockershim.sockname: mastertaints:- effect: NoSchedulekey: node-role.kubernetes.io/master
---
apiServer:timeoutForControlPlane: 4m0s
apiVersion: kubeadm.k8s.io/v1beta2
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controllerManager: {}
dns:type: CoreDNS
etcd:local:dataDir: /var/lib/etcd
imageRepository: registry.aliyuncs.com/google_containers
kind: ClusterConfiguration
kubernetesVersion: v1.20.0
networking:dnsDomain: cluster.localserviceSubnet: 10.96.0.0/12podSubnet: 10.244.0.0/16
scheduler: {}
---
apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
mode: ipvs
---
apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
cgroupDriver: systemd
[rootmaster ~]#
4.3、基于kubeadm.yaml文件初始化k8s
[rootmaster ~]# kubeadm init --configkubeadm.yaml --ignore-preflight-errorsSystemVerification[rootmaster ~]# mkdir -p $HOME/.kube
您在 /var/spool/mail/root 中有新邮件
[rootmaster ~]# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[rootmaster ~]# sudo chown $(id -u):$(id -g) $HOME/.kube/config
[rootmaster ~]# 接下来去node-1和node-2上去执行
[rootnode-1 ~]# kubeadm join 192.168.182.133:6443 --token abcdef.0123456789abcdef --discovery-token-ca-cert-hash sha256:a258f95963e807c99fd3c1fb6d6bea67c781406006db3e26e1575dbbe71b2736去master上查看是否成功
[rootmaster ~]# kubectl get node
NAME STATUS ROLES AGE VERSION
master NotReady control-plane,master 8m22s v1.20.6
node-1 NotReady none 67s v1.20.6
node-2 NotReady none 61s v1.20.6
[rootmaster ~]# 4.4、改一下node的角色为worker
[rootmaster ~]# kubectl label node node-1 node-role.kubernetes.io/workerworker
node/node-1 labeled
[rootmaster ~]# kubectl label node node-2 node-role.kubernetes.io/workerworker
node/node-2 labeled
[rootmaster ~]# kubectl get node
NAME STATUS ROLES AGE VERSION
master NotReady control-plane,master 15m v1.20.6
node-1 NotReady worker 8m12s v1.20.6
node-2 NotReady worker 8m6s v1.20.6
[rootmaster ~]# 4.5、安装网络插件
先利用xftp上传文件:calico.yml到/root/
[rootmaster ~]# kubectl apply -f calico.yaml
[rootmaster ~]# kubectl get node
NAME STATUS ROLES AGE VERSION
master Ready control-plane,master 20m v1.20.6
node-1 Ready worker 13m v1.20.6
node-2 Ready worker 13m v1.20.6
[rootmaster ~]# STATUS的状态变为Ready —成功了
5、一些基本的命令
5.1、kubectl get namespace (命名空间)
查看命名空间
[rootmaster ~]# kubectl get namespace
NAME STATUS AGE
default Active 3h38m
kube-node-lease Active 3h38m
kube-public Active 3h38m
kube-system Active 3h38m
[rootmaster ~]# kube-system 是k8s实现管理功能的命名空间 --政府–公务员–实现整个k8s的管理职能default 是默认的创建的业务容器运行的命名空间 k8s的核心思想以容器治容器 —》以容器管理容器 —》以华治华 kubectl get node
查看node节点的状态
[rootmaster ~]# kubectl get node
NAME STATUS ROLES AGE VERSION
master Ready control-plane,master 3h29m v1.20.6
node-1 Ready worker 3h21m v1.20.6
node-2 Ready worker 3h21m v1.20.65.2、kubectl get pod
查看启动了哪些pod
[rootmaster ~]# kubectl get pod[rootmaster ~]# kubectl get pod -n kube-system
NAME READY STATUS RESTARTS AGE
calico-kube-controllers-6949477b58-d457n 1/1 Running 0 3h28m
calico-node-48bw7 1/1 Running 0 3h28m
calico-node-lwvsk 1/1 Running 0 3h28m
calico-node-zjvg8 1/1 Running 0 3h28m
coredns-7f89b7bc75-pncxv 1/1 Running 0 3h47m
coredns-7f89b7bc75-qb966 1/1 Running 0 3h47m
etcd-master 1/1 Running 0 3h48m
kube-apiserver-master 1/1 Running 1 3h48m
kube-controller-manager-master 1/1 Running 0 3h48m
kube-proxy-48lqm 1/1 Running 0 3h40m
kube-proxy-7kfxj 1/1 Running 0 3h47m
kube-proxy-lwlxq 1/1 Running 0 3h40m
kube-scheduler-master 1/1 Running 0 3h48m
[rootmaster ~]# 这个 kubectl get pod -n kube-system 命令的含义是在 Kubernetes 集群中获取属于 kube-system 命名空间的所有 Pod。
解释如下
kubectl: Kubernetes 命令行工具。get pod: 获取 Pod 资源的信息。-n kube-system: 指定命名空间为 kube-system
6、pod是什么?
在KubernetesK8s中Pod是最小的可部署单元。一个Pod可以包含一个或多个容器它们共享相同的网络命名空间、存储卷以及一些其他资源。Pod是Kubernetes中多个容器协同工作的基本单元通常用于组织和管理紧密耦合的容器组。
Pod提供了一些重要的特性 共享网络命名空间Pod内的容器可以使用相同的IP地址和端口空间容器之间可以通过localhost进行通信。 共享存储卷Pod内的容器可以访问相同的存储卷从而实现容器之间的数据共享。 共享进程空间Pod内的容器运行在相同的Linux命名空间中它们可以共享进程视图。 一个Pod中的容器共享生命周期Pod中的所有容器将同时启动、停止和重新启动。
总体而言Pod是Kubernetes中的基本构建块用于组织和管理容器化应用程序。容器是Pod中的一个组成部分但Pod提供了更高层次的抽象用于协调和管理这些容器。
7、k8s中的组件 7.1、在master上跑哪些组件—运行哪些程序
Kube API ServerAPI服务器 作用作为Kubernetes系统的前端接口接收来自用户和其他组件的API请求并将这些请求转发给其他组件进行处理。监听6443端口重要特性提供了RESTful API是Kubernetes系统的唯一接口。 etcd分布式键值存储 作用保存了Kubernetes集群的所有重要配置信息包括集群状态、配置、元数据等。存储数据的。监听的端口: 2379,2380重要特性保证高可用性和一致性是Kubernetes的数据存储后端。 Kube Controller Manager控制器管理器 作用负责运行控制器监视集群的状态变化并根据状态的变化进行相应的调整和控制。重要特性包括节点控制器、副本控制器、服务控制器等。 Kube Scheduler调度器 作用 负责监视新创建的、未指定运行节点node的 Pods 并选择节点来让 Pod 在上面运行。重要特性支持自定义调度器具有插件式架构。 cloud Controller Manager云控制器管理器 作用: 对接云的阿里腾讯亚马逊等
7.2、在node上跑哪些组件—运行哪些程序
Kubelet节点代理 作用负责在节点上运行和管理容器监视与报告容器状态并与控制平面的 Kube API Server 通信。—调用docker帮我们启容器—指挥docker去启动容器在Node上的运行每个节点都有一个运行 Kubelet 的实例。 Kube Proxy代理 作用负责维护节点上的网络规则将服务暴露给集群内或集群外的其他服务。在Node上的运行每个节点都有一个运行 Kube Proxy 的实例。 联想到docker proxy Docker代理Docker Proxy通常是指Docker守护进程中的HTTP代理或HTTPS代理设置用于在Docker守护进程与Docker Hub或其他镜像仓库之间进行网络通信。这个代理在一些网络环境中是必要的例如在使用代理服务器访问互联网时或者在受限制的网络环境中。 8、启动nginx的pod
[rootmaster ~]# kubectl create deployment k8s-nginx --imagenginx -r 3
deployment.apps/k8s-nginx created
[rootmaster ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
k8s-nginx-75f95db655-dxwc6 0/1 ContainerCreating 0 18s
k8s-nginx-75f95db655-f8cnx 0/1 ContainerCreating 0 18s
k8s-nginx-75f95db655-ww9mk 0/1 ContainerCreating 0 18s
[rootmaster ~]# 该命令使用kubectl在Kubernetes集群中创建一个名为 k8s-nginx 的部署Deployment使用 Nginx 镜像并指定副本数为 3。
具体解释如下 kubectl create deployment k8s-nginx创建一个名为 k8s-nginx 的部署。 --imagenginx指定部署使用的容器镜像这里是 Nginx 镜像。部署将会启动包含该镜像的 Pod。 -r 3设置副本数为 3。这表示在集群中将有 3 个相同的 Pod 实例每个 Pod 都运行着 Nginx 容器。副本数是部署控制的实例数用于确保在集群中有指定数量的运行实例。
总结起来这个命令的目的是在 Kubernetes 集群中创建一个部署该部署会启动 3 个运行 Nginx 镜像的 Pod 实例。这是一个简单的部署示例你可以根据实际需求进行更复杂的部署配置。
netes 集群中创建一个部署该部署会启动 3 个运行 Nginx 镜像的 Pod 实例。这是一个简单的部署示例你可以根据实际需求进行更复杂的部署配置。
查看启的容器在哪个node节点上
[rootmaster ~]# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
k8s-nginx-75f95db655-dxwc6 1/1 Running 0 68s 10.244.84.130 node-1 none none
k8s-nginx-75f95db655-f8cnx 1/1 Running 0 68s 10.244.84.131 node-1 none none
k8s-nginx-75f95db655-ww9mk 1/1 Running 0 68s 10.244.247.3 node-2 none none
[rootmaster ~]#