K8S1.6免证书搭建

K8S1.6免证书搭建,第1张

<table style="width:100%">
<tr>
<th width=10%, bgcolor=yellow >主机名</th>
<th width=10%, bgcolor=yellow> *** 作系统</th>
<th width=20%, bgcolor=yellow>IP地址</th>
<th width=15%, bgcolor=yellow>角色</th>
<th width=45%, bgcolor=yellow>安装软件</th>
</tr>
<tr>
<td bgcolor=#eeeeee align="center"> node1 </td>
<td align="center"> CentOS 7 </td>
<td align="center"> 192168192128 </td>
<td align="center"> Master、Node </td>
<td align="left"> etcd、kube-apiserver、kube-scheduler、kube-controller-manager、kubelet、kube-proxy、flannel、docker </td>
</tr>
<tr>
<td bgcolor=#00FF00 align="center">node2 </td>
<td align="center"> CentOS 7 </td>
<td align="center"> 192168192128 </td>
<td align="center"> Node </td>
<td align="left"> etcd、kubelet、kube-proxy、flannel、docker </td>
<tr>
<td bgcolor=rgb(0,10,0) align="center">node3 </td>
<td align="center"> CentOS 7 </td>
<td align="center"> 192168192128 </td>
<td align="center"> Node </td>
<td align="left"> etcd、kubelet、kube-proxy、flannel、docker </td>
</table>

在/usr/lib/systemd/system/下创建kube-apiserverservice

内容如下:

(-iface=eth0注意也要改)

注意:以上这步只需要在kubernetes node集群中的一台执行一次就可以了。

注意1:将配置文件中的IP地址更改为你的每台node节点的IP地址(除了--api-servers=>

kubeadm 是Kubernetes官方提供的用于快速安装Kubernetes集群的工具,通过kubeadm的方式安装集群比二进制的方式安装高效不少。建议初次使用k8s使用此方式安装,二进制的方式会很快令人失去信心。

在开始之前,部署Kubernetes集群机器需要满足以下几个条件:

dnsmasq安装可参考我的另一篇 文章

ha1节点配置

ha2节点配置

在两台ha节点都执行

启动后查看ha的网卡信息(有一台可看到vip)

两台ha节点的配置均相同,配置中声明了后端代理的两个master节点服务器,指定了haproxy运行的端口为16443等,因此16443端口为集群的入口

两台ha都启动

检查端口

Kubernetes默认CRI(容器运行时)为Docker,因此先安装Docker。kubelet控制容器,kubeadm控制加入平面。

镜像加速

由于版本更新频繁,这里指定版本号部署:

在master1 *** 作

按照提示配置环境变量,使用kubectl工具:

按照提示保存以下内容,一会要使用:

查看集群状态

从官方地址获取到flannel的yaml,在master1上执行

安装flannel网络

检查

从master1复制密钥及相关文件到master2

master3 *** 作同上

执行在master1上init后输出的join命令,需要带上参数 --control-plane 表示把master控制节点加入集群

检查状态

在node1、2、3上执行

向集群添加新节点,执行在kubeadm init输出的kubeadm join命令:

检查状态

在Kubernetes集群中创建一个pod,验证是否正常运行:

访问地址: >注意把10170208111 替换成自己linux虚拟机的ip地址

# kubeadm init  \

--apiserver-advertise-address=10170208111  \

--image-repository registryaliyuncscom/google_containers  \

--kubernetes-version=v1194  \

--service-cidr=109600/12  \

--pod-network-cidr=1024400/16  \

--token-ttl=0

安装方式建议实用kubeadm安装方式

kubectl taint nodes --all node-rolekubernetesio/master-

wget >

grep -E '(vmx|svm)' /proc/cpuinfo

yum install qemu virt kvm -y

Question:

Solution:已安装的跳过

yum install qemu virt kvm -y --skip-broken

systemctl start libvirtd

systemctl enable libvirtd

virsh list

yum install -y bridge-utils

#配置桥接模式

cd /etc/sysconfig/network-scripts

cp ifcfg-em2 ifcfg-br0

[root@localhost network-scripts]# vim ifcfg-em2

TYPE=Ethernet

BRIDGE=br0

NAME=em2

UUID=74c8085f-4c0d-4743-b0a0-70e51e3eb877

DEVICE=em2

ONBOOT=yes

#注意IPADDR 要改为自己的

[root@localhost network-scripts]# vim ifcfg-br0

TYPE=Bridge

PROXY_METHOD=none

BROWSER_ONLY=no

BOOTPROTO=none

DEFROUTE=yes

IPV4_FAILURE_FATAL=no

IPV6INIT=yes

IPV6_AUTOCONF=yes

IPV6_DEFROUTE=yes

IPV6_FAILURE_FATAL=no

IPV6_ADDR_GEN_MODE=stable-privacy

NAME=br0

DEVICE=br0

ONBOOT=yes

IPADDR=17216103

PREFIX=24

GATEWAY=1721610254

DNS1=114114114114

systemctl restart network

#验证

brctl show

cd /home/kvm

#创建master虚拟机的存储盘 104

qemu-img create -f qcow2 -o cluster_size=2M k8s-master01qcow2 200G

virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name k8s-master01qcow2 --memory 8192 --vcpus 4 --disk /home/kvm/k8s-master01qcow2,format=qcow2 --cdrom /home/kvm/CentOS-7-x86_64-DVD-2009iso --network bridge=br0 --graphics vnc,listen=0000 --noautoconsole

#创建worker虚拟机的存储盘 105

qemu-img create -f qcow2 -o cluster_size=2M k8s-worker01qcow2 200G

virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name k8s-worker01qcow2 --memory 8192 --vcpus 4 --disk /home/kvm/k8s-worker01qcow2,format=qcow2 --cdrom /home/kvm/CentOS-7-x86_64-DVD-2009iso --network bridge=br0 --graphics vnc,listen=0000 --noautoconsole

#创建worker虚拟机的存储盘 103

qemu-img create -f qcow2 -o cluster_size=2M k8s-worker02qcow2 200G

virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name k8s-worker02qcow2 --memory 32768 --vcpus 32 --disk /home/kvm/k8s-worker02qcow2,format=qcow2 --cdrom /home/kvm/CentOS-7-x86_64-DVD-2009iso --network bridge=br0 --graphics vnc,listen=0000 --noautoconsole

netstat -ntlp | grep 5900

virsh list --all

virsh shutdown k8s-master01qcow2

virsh start k8s-master01qcow2

ssh 172161050 root@starQuest2022

Question:系统启动卡住

Solution:

virsh destroy k8s-master01qcow2

virsh undefine k8s-master01qcow2

Question:更改桥接模式失败引发的问题

Solution:

vi /etc/sysconfig/network-scripts/ifcfg-eth0

TYPE=Ethernet

PROXY_METHOD=none

BROWSER_ONLY=no

BOOTPROTO=static

DEFROUTE=yes

IPV4_FAILURE_FATAL=no

IPV6INIT=yes

IPV6_AUTOCONF=yes

IPV6_DEFROUTE=yes

IPV6_FAILURE_FATAL=no

IPV6_ADDR_GEN_MODE=stable-privacy

NAME=eth0

UUID=c510f2f9-9820-45e8-9c70-65674bd35258

DEVICE=eth0

ONBOOT=yes

IPADDR=172161050

PREFIX=24

GATEWAY=1721610254

DNS1=114114114114

systemctl restart network

Question:

Solution:

vi /root/ssh/known_hosts 删除有问题IP对应行

#设置hostname

hostnamectl set-hostname k8s-master01

hostnamectl set-hostname k8s-worker01

hostnamectl set-hostname k8s-worker02

yum update

yum install wget

yum install vim

rpm --import >本地没镜像会自动去仓库拉取镜像,最后启动成功后,访问部署服务器的ip即可。
初次访问会让设置密码,即admin用户密码,设置完成后就进入rancher了。

参考了百度,使用如下方法解决了,但是这种方法还不是最优,(记得往下看)

添加完配置,等rancher自动重新deploy后,还是不行然后就去看了kubelet容器日志,有报错

可能由于之前误 *** 作或者kubelet自动清理 /opt/cni/bin 目录下没有任何程序了,然后复制了其它同镜像的容器里 /opt/cni/bin 下面的文件到宿主机 /opt/cni/bin 目录下,就好了。没有报错,问题解决。但这种自己加配置文件,cniVersion还糊里糊涂的方式明显不合适,于是就又看了看rancher的kubernetes配置。
最后找到了问题所在:
rancher默认的kubernetes配置中,默认注释掉了网络提供者,取消注释就行了
在集群界面,点击“编辑集群”,然后选择“编辑yaml”,在kubernetes的配置yaml中, network 部分从上面的注释中复制如下配置,添加进去:

配置如图:
网络问题解决之后,又遇到了新的报错:

百度的结果是让

但我们这是在编辑yaml,于是就改成了:
yaml文件中kubelet那一项下面添加配置:

配置如图:

然后rancher会自动重新deploy,最后完事儿之后,集群就好了哈哈哈哈哈(不愧是我。

节点(包含etcd、control、worker)最后启动的所有容器如下图:

集群状态如下图:

最后再附一个rancher节点清理指路,以前残留的数据会影响集群的,要注意保证服务器环境的整洁,kubelet容器会挂载 /etc/cni , /opt/cni 目录的,etcd会挂载 /var/lib/etcd 目录。
>

本文将介绍 k8s 中的一些最基本的命令,并辅以解释一些基本概念来方便理解,也就是说,本文是一篇偏向实用性而非学术性的文章,如果你想提前了解一下 k8s 相关的知识的话,可以通过以下链接进行学习:

k8s 是经典的一对多模型,有一个主要的管理节点 master 和许多的工作节点 slaver 。当然,k8s 也可以配置多个管理节点,拥有两个以上的管理节点被称为 高可用 。k8s 包括了许多的组件,每个组件都是单运行在一个 docker 容器中,然后通过自己规划的虚拟网络相互访问。你可以通过 kubectl get pod -n kube-system 查看所有节点上的组件容器。

在管理节点中会比工作节点运行更多的 k8s 组件,我们就是靠着这些多出来的组件来对工作节点发号施令。他们都叫什么这里就不详细提了。反正对于”基本使用“来说,这些名字并不重要。

要想理解一个东西就要先明白它的内在理念。通俗点就是,k8s 做了什么?为了提供更加可靠的服务,就要增加服务器的数量,减少每个服务器的体量来平摊负载,而越来越多的虚拟机就会带来越来越高的运维成本。如何让少量的运维人员就可以管理数量众多的服务器及其上的服务呢?这就是 k8s 做的工作。

k8s 把数量众多的服务器重新抽象为一个统一的资源池 ,对于运维人员来说,他们面前没有服务器1、服务器2的概念,而是一个统一的资源池,增加新的服务器对运维人员来说,只是增加自资源池的可用量。不仅如此,k8s 把所有能用的东西都抽象成了资源的概念,从而提供了一套更统一,更简洁的管理方式。

接下来,我会把每个基本命令当做一节来进行介绍,并辅以介绍一些基本概念。本文介绍的命令涵盖了增删改查四方面,可参加下面表格,因为篇幅较长,我们将 create 及之后的不那么常用的命令放在下一篇文章 k8s 基本使用(下) 里讲:

接下来进入正题,首先来了解一下 k8s 中最最最常用的命令 kubectl get ,要记住,k8s 把所有的东西都抽象成了资源,而 kubectl get 就是用来查看这些资源的。最常见的资源就是 pod 。

不仅我们自己的服务是要包装成 pod 的,就连 k8s 自己也是运行在一堆 pod 上。接下来就让我们查看一下 k8s 的 pod :

-n 参数指定了要查看哪个命名空间下的 pod 。 k8s 所有的 pod 都被放置在 kube-system 命名空间下。

执行了 kubectl get pod -n kube-system 命令后,你就可以看到如下内容:

其中每一行就是一个资源,这里我们看到的资源是 pod 。你看到的 pod 数量可能和我的不一致,因为这个列表里包含了 k8s 在所有节点上运行的 pod ,你加入的节点越多,那么显示的 pod 也就越多。我们来一列一列的看:

kubectl get 可以列出 k8s 中所有资源

这里只介绍了如何用 kubectl 获取 pod 的列表。但是不要把 get 和 pod 绑定在一起,pod 只是 k8s 中的一种服务,你不仅可以 get pod ,还可以 get svc ( 查看服务 )、 get rs ( 查看副本控制器 )、 get deploy ( 查看部署 )等等等等,虽然说 kubectl get pod 是最常用的一个,但是如果想查看某个资源而又不知道命令是什么, kbuectl get <资源名> 就对了。

如果你想看更多的信息,就可以指定 -o wide 参数,如下:

加上这个参数之后就可以看到资源的所在 ip 和所在节点 node 了。

记得加上 -n

-n 可以说是 kubectl get 命令使用最频繁的参数了,在正式使用中,我们永远不会把资源发布在默认命名空间。所以,永远不要忘记在 get 命令后面加上 -n 。

kubectl get 命令可以列出 k8s 中的资源,而 kubectl get pod 是非常常用的查看 pod 的命令。而 -n 参数则可以指定 pod 所在的命名空间。

kubectl describe 命令可以用来查看某一资源的具体信息,他同样可以查看所有资源的详情, 不过最常用的还是查看 pod 的详情 。他也同样可以使用 -n 参数指定资源所在的命名空间。

举个例子,我们可以用下面命令来查看刚才 pod 列表中的某个 pod,注意不要忘记把 pod 名称修改成自己的:

然后你就可以看到很多的信息,咱们分开说,首先是基本属性,你可以在详细信息的开头找到它:

基本属性

其中几个比较常用的,例如 Node 、 labels 和 Controlled By 。通过 Node 你可以快速定位到 pod 所处的机器,从而检查该机器是否出现问题或宕机等。通过 labels 你可以检索到该 pod 的大致用途及定位。而通过 Controlled By ,你可以知道该 pod 是由那种 k8s 资源创建的,然后就可以使用 kubectl get <资源名> 来继续查找问题。例如上文 DaemonSet/kube-flannel-ds-amd64 ,就可以通过 kubectl get DaemonSet -n kube-system 来获取上一节资源的信息。

内部镜像信息

在中间部分你可以找到像下面一样的 Containers 段落。该段落详细的描述了 pod 中每个 docker 容器的信息,常用的比如 Image 字段,当 pod 出现 ImagePullBackOff 错误的时候就可以查看该字段确认拉取的什么镜像。其他的字段名都很通俗,直接翻译即可。

事件

在 describe 查看详情的时候,最常用的信息获取处就是这个 Event 段落了,你可以在介绍内容的末尾找到它,如下:

是的,如果你看到上面这样,没有任何 Events 的话,就说明该 pod 一切正常。当 pod 的状态不是 Running 时,这里一定会有或多或少的问题,长得像下面一样,然后你就可以通过其中的信息分析 pod 出现问题的详细原因了:

kubectl describe <资源名> <实例名> 可以查看一个资源的详细信息,最常用的还是比如 kubectl describe pod <pod名> -n <命名空间> 来获取一个 pod 的基本信息。如果出现问题的话,可以在获取到的信息的末尾看到 Event 段落,其中记录着导致 pod 故障的原因。

如果你想查看一个 pod 的具体日志,就可以通过 kubectl logs <pod名> 来查看。注意,这个只能查看 pod 的日志。通过添加 -f 参数可以持续查看日志。例如,查看 kube-system 命名空间中某个 flannel pod 的日志,注意修改 pod 名称:

然后就可以看到如下输出:

如果你发现某个 pod 的服务有问题,但是状态还是显示 Running ,就可以使用 kubectl logs 来查看其详细日志。

在本篇文章里,我们了解了 k8s 的宗旨和一些基本概念,并知道了最为常用的 get 、 descibe 及 logs 命令,知道了这三条命令之后就几乎可以从 k8s 中获取所有常用信息了。接下来的 k8s 基本使用(下) 里,我们会更深一步,来了解 k8s 中如何创建、修改及删除资源。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/10540297.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-09
下一篇2023-05-09

发表评论

登录后才能评论

评论列表(0条)

    保存