手把手教你部署k8s(kubeadm方式)-------详解_kubeode_yjssjm的博客-程序员秘密

技术标签: 笔记  运维  k8s  linux  

1.Kubernetes架构与组件示意图

在这里插入图片描述

2.部署准备

准备三台虚拟机,master节点至少2核2G

master:	192.168.13.141  
node1:		192.168.13.142 
node2: 	192.168.13.143 
所有机器:
关闭防火墙:
systemctl stop firewalld
systemctl disable firewalld

关闭selinux:
sed -i 's/enforcing/disabled/' /etc/selinux/config 
setenforce 0

关闭swap:
swapoff -a  	# 临时
vim /etc/fstab  #永久(将带有swap的那一行注释掉)
free -m 		#查看,swap那一行会全部显示0

添加主机名与IP对应关系(记得设置主机名):
cat /etc/hosts
192.168.13.141 	master
192.168.13.142	node1
192.168.13.143	node2

同步时间:(也可以不用同步,但是三台虚拟机的时间相差不能超过一天,
因为token只有一天的作用效果)
yum install ntpdate
ntpdate -u ntp.api.bz 
ntpdate ntp1.aliyun.com    #这里用的是阿里的

将桥接的IPv4流量传递到iptables的链:
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system        #使配置生效

这些准备条件都需要做好,要不然很容易报错的

3.所有节点安装Docker/kubeadm/kubelet

1.安装Docker

Kubernetes默认CRI(容器运行时)为Docker,因此先安装Docker。
安装新版docker以及报错详解

#安装必要的一些系统工具
yum install -y yum-utils device-mapper-persistent-data lvm2
#添加软件源信息
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 更新并安装Docker-CE
yum makecache fast
yum -y install docker-ce
#开启Docker服务
systemctl enable docker && systemctl start docker
2.添加阿里云YUM软件源
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
3.安装kubeadm,kubelet和kubectl

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

yum install -y kubelet-1.14.0 kubeadm-1.14.0 kubectl-1.14.0   
#我这里用的是1.14的,其他版本的都行
systemctl enable kubelet 

这里做完之后建议做一个快照,因为下面一不小心就会出错

4.部署Kubernetes Master

在192.168.13.141(Master)执行下面操作
[[email protected] ~]# vim yjssjm.sh    
#因为命令太长,还需要修改,所以直接创建一个文件来执行
kubeadm init \
  --apiserver-advertise-address=192.168.13.141 \
  --image-repository registry.aliyuncs.com/google_containers \
  --kubernetes-version v1.14.0 \
  --service-cidr=10.1.0.0/16 \
  --pod-network-cidr=10.244.0.0/16
================================================================
--apiserver-advertise-address=192.168.13.141   #指定master节点IP
--image-repository registry.aliyuncs.com/google_containers
#由于默认拉取镜像地址k8s.gcr.io国内无法访问,这里指定阿里云镜像仓库地址。
--kubernetes-version v1.14.0  #指定版本号
--pod-network-cidr=10.244.0.0/16   #指定pod的网段
================================================================
[[email protected] ~]# sh yjssjm.sh
[init] Using Kubernetes version: v1.14.0
[preflight] Running pre-flight checks
        [WARNING IsDockerSystemdCheck]: detected "cgroupfs" as the Docker cgroup driver. The recommended driver is "systemd". Please follow the guide at https://kubernetes.io/docs/setup/cri/
[preflight] Pulling images required for setting up a Kubernetes cluster
[preflight] This might take a minute or two, depending on the speed of your internet connection
...........................
...........................
Your Kubernetes control-plane has initialized successfully!

To start using your cluster, you need to run the following as a regular user:

  mkdir -p $HOME/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config

You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
  https://kubernetes.io/docs/concepts/cluster-administration/addons/

Then you can join any number of worker nodes by running the following on each as root:

kubeadm join 192.168.13.141:6443 --token r9t8e3.nzsxr2k4bdjtw5t9 \
    --discovery-token-ca-cert-hash sha256:1fe4f2d46e552f374919102d10061ceb2100008154b6ef9060ee73db7b37d55b 

最后会生成一个token  ,将其保存好
[[email protected] ~]# cat token.txt 
kubeadm join 192.168.13.141:6443 --token r9t8e3.nzsxr2k4bdjtw5t9 \
    --discovery-token-ca-cert-hash sha256:1fe4f2d46e552f374919102d10061ceb2100008154b6ef9060ee73db7b37d55b
使用kubectl工具:
[[email protected] ~]# mkdir -p $HOME/.kube
[[email protected] ~]# cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[[email protected] ~]# chown $(id -u):$(id -g) $HOME/.kube/config
[[email protected] ~]# kubectl get nodes   #测试kubectl命令是否能使用
NAME     STATUS     ROLES    AGE   VERSION
master   NotReady   master   11m   v1.14.0

5.安装Pod网络插件(CNI)

[[email protected] ~]# kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/a70459be0084506e4ec919aa1c114638878db11b/Documentation/kube-flannel.yml 
clusterrole.rbac.authorization.k8s.io/flannel created
clusterrolebinding.rbac.authorization.k8s.io/flannel created
serviceaccount/flannel created
configmap/kube-flannel-cfg created
daemonset.extensions/kube-flannel-ds-amd64 created
daemonset.extensions/kube-flannel-ds-arm64 created
daemonset.extensions/kube-flannel-ds-arm created
daemonset.extensions/kube-flannel-ds-ppc64le created
daemonset.extensions/kube-flannel-ds-s390x created
[[email protected] ~]# kubectl get pods -n kube-system -o wide   #查看状态
NAME                             READY   STATUS    RESTARTS   AGE    IP               NODE     NOMINATED NODE   READINESS GATES
coredns-8686dcc4fd-4nlrq         1/1     Running   0          16m    10.244.0.3       master   <none>           <none>
coredns-8686dcc4fd-57f2z         1/1     Running   0          16m    10.244.0.2       master   <none>           <none>
etcd-master                      1/1     Running   0          16m    192.168.13.141   master   <none>           <none>
kube-apiserver-master            1/1     Running   0          15m    192.168.13.141   master   <none>           <none>
kube-controller-manager-master   1/1     Running   0          16m    192.168.13.141   master   <none>           <none>
kube-flannel-ds-amd64-9ls8s      1/1     Running   0          2m1s   192.168.13.141   master   <none>           <none>
kube-proxy-9j2ft                 1/1     Running   0          16m    192.168.13.141   master   <none>           <none>
kube-scheduler-master            1/1     Running   0          15m    192.168.13.141   master   <none>           <none>
只有都是running才是成功,如果你是pending或者Errimages之类的 一般都是拉取镜像失败,
你可以手动去拉取镜像。

加入Kubernetes Node

[[email protected] ~]# kubectl get no   #目前没有node节点加入
NAME     STATUS     ROLES    AGE   VERSION
master   Ready      master   23m   v1.14.0
[[email protected] ~]# cat token.txt #找到刚刚生成的token
kubeadm join 192.168.13.141:6443 --token r9t8e3.nzsxr2k4bdjtw5t9 \
    --discovery-token-ca-cert-hash sha256:1fe4f2d46e552f374919102d10061ceb2100008154b6ef9060ee73db7b37d55b

复制上面文件里面的内容,在node节点上执行
[[email protected] ~]# kubeadm join 192.168.13.141:6443 --token r9t8e3.nzsxr2k4bdjtw5t9 \
>     --discovery-token-ca-cert-hash sha256:1fe4f2d46e552f374919102d10061ceb2100008154b6ef9060ee73db7b37d55b
[[email protected] ~]# kubeadm join 192.168.13.141:6443 --token r9t8e3.nzsxr2k4bdjtw5t9 \
>     --discovery-token-ca-cert-hash sha256:1fe4f2d46e552f374919102d10061ceb2100008154b6ef9060ee73db7b37d55b
[[email protected] ~]# kubectl get no   #再次查看,node节点已经加入
NAME     STATUS     ROLES    AGE   VERSION
master   Ready      master   23m   v1.14.0
node1    NotReady   <none>   27s   v1.14.0
node2    NotReady   <none>   23s   v1.14.0

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

这里用daocloud的镜像,以防下载慢导致失败
[[email protected] ~]# kubectl create deployment nginx --image=daocloud.io/library/nginx  
deployment.apps/nginx created
[[email protected] ~]# kubectl expose deployment nginx --port=80 --type=NodePort  #映射端口
service/nginx exposed
[[email protected] ~]# kubectl get pod,svc   #查看状态以及映射的端口号
NAME                         READY   STATUS    RESTARTS   AGE
pod/nginx-5f965696dd-z4tnk   1/1     Running   0          22s

NAME                 TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)        AGE
service/kubernetes   ClusterIP   10.1.0.1       <none>        443/TCP        29m
service/nginx        NodePort    10.1.221.148   <none>        80:31326/TCP   10s
[[email protected] ~]# curl -I 192.168.13.142:31326  #状态返回码是200
HTTP/1.1 200 OK
Server: nginx/1.17.10
Date: Wed, 06 May 2020 08:48:07 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Tue, 14 Apr 2020 14:19:26 GMT
Connection: keep-alive
ETag: "5e95c66e-264"
Accept-Ranges: bytes

访问: 192.168.13.142:31326 能访问到nginx界面
在这里插入图片描述

6.安装Kuboard

Kuboard 是 Kubernetes 的一款图形化管理界面。
你也可以参考官网安装Kuboard官网

[[email protected] ~]# kubectl apply -f https://kuboard.cn/install-script/kuboard.yaml
[[email protected] ~]# kubectl apply -f https://addons.kuboard.cn/metrics-server/0.3.6/metrics-server.yaml
查看 Kuboard 运行状态:
[[email protected] ~]# kubectl get pods -l k8s.eip.work/name=kuboard -n kube-system
NAME                       READY   STATUS    RESTARTS   AGE
kuboard-7db58754b5-cq4gt   1/1     Running   0          6m57s

http://任意一个node节点的IP地址:32567/
在这里插入图片描述

[[email protected] ~]# echo $(kubectl -n kube-system get secret $(kubectl -n kube-system get secret | grep kuboard-user | awk '{print $1}') -o go-template='{
    {.data.token}}' | base64 -d)
eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJrdWJvYXJkLXVzZXItdG9rZW4tNWNybW4iLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC5uYW1lIjoia3Vib2FyZC11c2VyIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQudWlkIjoiMGM1OTNmYzctOGZhYS0xMWVhLWFlOGYtMDAwYzI5ODE0ZWY4Iiwic3ViIjoic3lzdGVtOnNlcnZpY2VhY2NvdW50Omt1YmUtc3lzdGVtOmt1Ym9hcmQtdXNlciJ9.O2oyHkQKLLeyTG0cZk7KA1g-1y_MS09BNFA7lbi02Dzm1GwCXe9X2a55Vy9hqaxbHEcYDjBF9OA1kA5CpM7dPJgXN4Z-tlDGkYdbcB-nMR--uffXbomPM4xbRvHD_HAcRqEc7nFw9MVIGr5cb4vGGJU4yEdalY9cg4iigyA0Jb4GaoNB_oy4QFM4LKik8OaXXro8yfj0QdFkF0DygsleyVp0VcZAmzHw5W--UPf5gHXOiF-mF3vgRtgbGiQdy3rBYp6FVfDISM-hSBTxfn8HdlrQi19m4t2FWza-IIxFoHg2rRq1B1fLvjgDiJRsHzJOaOsY2Pd-m-nnTjr0pXYt5A

在这里插入图片描述
如果你中途报错了,不妨看看这篇文章
k8s报错:pod状态为pending,coredns的状态是pending的解决办法

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/baidu_38803985/article/details/105976974

智能推荐

Allegro学习笔记之——覆铜_allegro铺铜_silent_dusbin的博客-程序员秘密

选中Shape圆——&gt;右键-&gt;选择Expand/Contract点击+是往外扩10mil,点击-是往内收10mil,后面的10mil是外扩或收缩的半径。

关于机器人运动学中变换矩阵左乘右乘的理解(2)-变换的观点_爱安敝之的博客-程序员秘密

(0)缘由这年复习考研,对矩阵有了更深入的理解,但对线性变换与基变换是有点混淆,偶然看了去年写的关于机器人运动学的文章,豁然开朗,遂写这篇文章分享一下所得,也是对上一片文章的拓展,所以读这篇文章前建议先看看前一片文章(还有想理解线代可以看看bilibili上3Blue1Brown的关于线性代数本质的视频,知乎上也有人整理过)。(0)从两种变换到矩阵左右乘{线性变换:u1⃗=Au0⃗基变换:u1⃗=Au0⃗\begin{cases} 线性变换: \vec{u_1}=A\vec{u_0}\\ 基变换

上传图片-服务端-Api接口开发_Leon_Jinhai_Sun的博客-程序员秘密

Servicepackage com.learn.filesystem.service;import com.alibaba.fastjson.JSON;import com.learn.filesystem.dao.FileSystemRepository;import com.learn.framework.domain.filesystem.FileSystem;import...

redis学习之一 - linux下安装配置_weixin_30765319的博客-程序员秘密

Content0.序1.如何安装?2.配置参数及其意义3.设为linux服务0.序本文主要是记录Redis在 Centos下的安装配置 。文中如无特别说明.表示redis-3.2.10代码目录。1.如何安装 $ wget http://download.redis.io/releases/redis-3.2.10.tar.gz$ tar -...

基于java的微信公众平台开发视频教程_java微信开发教程视频_Mr_苏的博客-程序员秘密

微信作为当前流行的通信社交软件已经有了几个亿的用户量,并且每天还在继续增加。几乎每一部智能手机都安装了微信。其公众平台拥有强大的功能。但是由于微信的示例代码基本使用php编写,市场上的java开发资料十分稀缺。因此主讲老师经过潜心研究、认真准备了这套针对java语言开发的”基于java的微信公众平台开发第一季”此为java微信开发第一季试看教程下载地址:http://p

随便推点

小米手机怎么关闭移动卡信号显示无服务器,一条指令代码教你解决小米手机信号和待机问题..._Sourav Goswami的博客-程序员秘密

小米手机的性价比一直是让米粉所追寻的为之疯狂的价值追求所在,但是当你你买回一台小米手机的时候,有时候手机信号不好怎么办?看到这里或许很多人会说这是小米手机的硬件问题,许多米粉可能都不知道小米手机信号不好是有办法可以解决的,就在你的手机在4G、3G网络或者是2G网络之间跳来跳去的时候。不妨让我们使用下面的方法来增强小米手机的信号。具体的小米手机网络增强锁定设置如下:打开你的小米手机在拨号模式下输入*...

关于m_pfnCreateObject_hazy的博客-程序员秘密

熟悉MFC大牛也许都知道m_pfnCreateObject,我这里为不熟悉的人再解释一下,MFC大牛可以直接忽略后面的文字。 CRuntimeClas的头文件声明里面,有一行非常奇怪的代码: CObject* (PASCAL* m_pfnCreateObject)(); // NULL => abstract class 这行代码是声明了一个名叫 m_pfnCreateObject 的函数指针,这个函数指针的类型是 CObject* (PASCAL* )()。 m_pfnCreateObject

ubuntu server 20.04 net.netfilter.nf_conntrack_max设置后重启不生效的问题解决_ubuntu20 么有nf_conntrack_有理叔的博客-程序员秘密

ubuntu server 20.04 要设置net.netfilter.nf_conntrack_max = 131072使用修改sysctl.conf的方式修改后,发现重启后无法生效,需要新建文件/etc/modprobe.d/nf_conntrack.conf写入内容options nf_conntrack hashsize=16384数值大小遵循net.netfilter.nf_conntrack_max =hashsize *8重启后可以生效...

ros(26):ros::Time::now(),ros::Duration,toSec(),toNSec();计算程序执行时间_biter0088的博客-程序员秘密

如果正在使用ROS时钟时间,则根据ROS时钟返回时间。否则返回当前挂钟时间,挂钟理解为在一个房间/环境里面挂的钟,没有人去管他/改变它,挂钟时间我理解为系统时间。我在rosnamespace里面没有找到,应该是c++的函数,意思是将“1ros时间格式说明”中所示的格式转为秒。时间有时刻和持续时间,其中持续时间可以是负数,格式如下,分为秒和纳秒,换算关系1nsec=1e-9sec。检索当前时间,是时刻时间。将时间或时间戳转换为纳秒。ros与c++入门教程--时间。......

linux 强制终止进程命令_weixin_33802505的博客-程序员秘密

kill pkill先找到要杀死进程的uid完整版所有的守护程序和进程都有一个进程ID(PID),例如使用ps命名所显示的内容:ps -aux |grep mysql简单版pgrep -l mysqlkill +uid对于僵尸进程用kill -9 uid杀掉了父进程,那么父进程下面的子进程也会死掉。pkill和killallpkill 和k...

Linux下多用户Anaconda环境的安装与卸载_linux anaconda duo yong hu_xcosy的博客-程序员秘密

Anaconda 的默认安装选项为用户独立安装,默认将 Anaconda 安装在该用户的 home 目录下,不会与同一系统上的其他用户共享。如果您具有管理员操作权限,则可以选择所有用户进行安装。对于要允许用户导入 Python 库并运行 Python 应用程序的多用户系统,这是一个不错的选择。安装 Anaconda下载 Anaconda 安装脚本,开始以管理员身份进行安装:sudo ...

推荐文章

热门文章

相关标签