003、基于yum方式部署kubernetes集群
本文最后更新于 68 天前,其中的信息可能已经过时,如有错误请发送邮件到wuxianglongblog@163.com

基于yum方式部署kubernetes集群

一.实验环境准备

k8s101.oldboyedu.com:
    kubernetes master节点,2core 4G。

k8s102.oldboyedu.com:
    kubernetes node节点,2core 4G。

k8s103.oldboyedu.com:
    kubernetes node节点,2core 4G。

k8s103.oldboyedu.com:
    kubernetes node节点,2core 4G。

二.部署单节点的etcd

1.在10.0.0.101节点安装etcd服务

yum -y install etcd

2.修改etcd的配置文件

cp /etc/etcd/etcd.conf /etc/etcd/etcd.conf-`date +%F`

vim /etc/etcd/etcd.conf  # 只修改以下2行即可。
ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379"
ETCD_ADVERTISE_CLIENT_URLS="http://10.0.0.101:2379"

常见的参数说明:
    ETCD_NAME :
        ETCD的节点名
    ETCD_DATA_DIR:
        ETCD的数据存储目录
    ETCD_SNAPSHOT_COUNTER:
        多少次的事务提交将触发一次快照
    ETCD_HEARTBEAT_INTERVAL:
        ETCD节点之间心跳传输的间隔,单位毫秒
    ETCD_ELECTION_TIMEOUT:
        该节点参与选举的最大超时时间,单位毫秒
    ETCD_LISTEN_PEER_URLS:
        该节点与其他节点通信时所监听的地址列表,多个地址使用逗号隔开,其格式可以划分为scheme://IP:PORT,这里的scheme可以是http、https
    ETCD_LISTEN_CLIENT_URLS:
        该节点与客户端通信时监听的地址列表
    ETCD_INITIAL_ADVERTISE_PEER_URLS:
        该成员节点在整个集群中的通信地址列表,这个地址用来传输集群数据的地址。因此这个地址必须是可以连接集群中所有的成员的。
    ETCD_INITIAL_CLUSTER:
        配置集群内部所有成员地址,其格式为:ETCD_NAME=ETCD_INITIAL_ADVERTISE_PEER_URLS,如果有多个使用逗号隔开
    ETCD_ADVERTISE_CLIENT_URLS:
        广播给集群中其他成员自己的客户端地址列表
    ETCD_INITIAL_CLUSTER_STATE:
        初始化集群状态,new表示新建
    ETCD_INITIAL_CLUSTER_TOKEN:
        初始化集群token

image-20210702225347357

3.启动etcd并设置开机自启动

[root@10.0.0.101 ~]# systemctl start etcd
[root@10.0.0.101 ~]# 
[root@10.0.0.101 ~]# systemctl enable etcd

image-20210702225629129

4.检查集群的健康状态

etcdctl -C http://10.0.0.101:2379 cluster-health

也可以使用:
    etcdctl --endpoints  http://10.0.0.101:2379 cluster-health

image-20210702225906992

5.操作etcd服务

增:
    mk:
        创建key.
    mkdir:
        创建目录.

删:
    rm:
        删除key和目录的.

    rmdir:
        删除key或者空目录.

改:
    set:
        修改key的value.

    update:
        修改已经存在key的value.

查:
    ls:
        查看某个目录.

    get:
        查看某个key的value.

温馨提示:
    key被抽象为2中类型的资源,即文件和目录.

三.master组件部署

1.在10.0.0.101节点安装master服务

[root@10.0.0.101 ~]# yum -y install kubernetes-master

2.配置apiserver组件

cp /etc/kubernetes/apiserver /etc/kubernetes/apiserver-`date +%F`
vim /etc/kubernetes/apiserver 

# 指定apiserver的监听地址,建议绑定所有地址。只能配置IP地址。
KUBE_API_ADDRESS="--insecure-bind-address=0.0.0.0"

# 指定apiserver的监听端口。
KUBE_API_PORT="--port=8080"

# 指定KUBELET_PORT的端口
KUBELET_PORT="--kubelet-port=10250"

# etcd集群中以逗号分隔的节点列表
KUBE_ETCD_SERVERS="--etcd-servers=http://10.0.0.101:2379"

# 要用于服务(SERVICE)的地址范围
KUBE_SERVICE_ADDRESSES="--service-cluster-ip-range=10.254.0.0/16"

...

image-20210703231857809

3.配置master的组件

cp /etc/kubernetes/config /etc/kubernetes/config-`date +%F`

vim /etc/kubernetes/config 

...

KUBE_MASTER="--master=http://10.0.0.101:8080"

如下图所示,相关参数说明如下:
KUBE_LOGTOSTDERR="--logtostderr=true"
    生成系统日志,会存放在"/var/log"目录。

KUBE_LOG_LEVEL="--v=0"
    设置日志消息级别,0代表的是debug模式。

KUBE_ALLOW_PRIV="--allow-privileged=false"
    是否允许使用特权容器,默认是不允许使用特权容器的。

KUBE_MASTER="--master=http://10.0.0.101:8080"
    指定kube master的地址。

温馨提示:
    在启动容时时,我们默认启动的容器时系统的内核参数是以只读的方式挂载,因此在容器内默认是无法修改内核参数的。
    如果非要在容器内部修改系统的内核参数,则在启动时应该使用"--privileged"让该容器称为特权容器。

image-20210703221720145

4.启动服务

systemctl enable kube-apiserver.service kube-controller-manager.service kube-scheduler.service
systemctl restart kube-apiserver.service kube-controller-manager.service kube-scheduler.service

温馨提示:
    服务启动成功后,会监听多个端口哟~

image-20210703232824940

5.检查服务是否安装正常

[root@10.0.0.101 ~]# kubectl get componentstatus 

image-20210703233005412

四.node组件部署

1.在所有的node节点上安装node服务

[root@k8s102.oldboyedu.com ~]# yum -y install kubernetes-node

温馨提示:
    如果你的环境足够"干净",则会自行安装相关的环境,当然也包括docker环境哟~

2.修改配置文件指定master节点信息

[root@k8s102.oldboyedu.com ~]# vim /etc/kubernetes/config 
...

KUBE_MASTER="--master=http://10.0.0.101:8080"

温馨提示:
    我们应该将所有的node节点都指向master节点。

image-20210704192542227

3.修改Kubelet组件的配置文件

[root@k8s102.oldboyedu.com ~]# vim /etc/kubernetes/kubelet 

...

# 指定kubelet组件监听的地址,建议设置为'0.0.0.0',不能设置为主机名,否则不会监听相应的端口。
KUBELET_ADDRESS="--address=0.0.0.0"

# 指定kubelet组件监听的地址端口。
KUBELET_PORT="--port=10250"

# 指定主机名。
KUBELET_HOSTNAME="--hostname-override=10.0.0.102"

# 指定apiserver的地址。
KUBELET_API_SERVER="--api-servers=http://10.0.0.101:8080"

...

温馨提示:
    我们可以将当前的配置文件移动到其它node节点稍作修改即可,比如只需改动"KUBELET_HOSTNAME"。

image-20210704193719962

4.启动服务并设置开机自启动

systemctl start kubelet.service kube-proxy.service 
systemctl enable kubelet.service kube-proxy.service 

温馨提示:
    如下图所示,当我们成功启动服务时。

image-20210704193409867

5.启动所有node节点。

    各个node节点重复上述步骤即可,也可以将上述节点的配置文件拷贝到其它服务器上。

    如下图所示,我们将k8s[102-104].oldboyedu.com这3个node节点成功加入到集群中。

image-20210704194728725

6.cAdvisor被内置到kubelet组建中

如下图所示,我们的cAdvisor被内置到kubelet组件中啦~版本是1.5哟~

1636637322631

五.所有节点部署flannel网络插件

1.安装flannel网络插件

[root@10.0.0.101 ~]# yum -y install flannel 

温馨提示:
    在master节点和所有的node节点部署flannel网络插件。

2.修改flannel的配置文件

sed -i 's#127.0.0.1#10.0.0.101#' /etc/sysconfig/flanneld 

温馨提示:
    所有节点都需要修改etcd的数据库地址,由于咱们的环境仅有一台,生产环境中是需要使用逗号分割指定集群的哟~

image-20210704213308147

3.修改etcd数据库信息

etcdctl mk /atomic.io/network/config '{"Network":"172.18.0.0/16","Backend": {"Type": "vxlan"}}'

相关参数说明:
    /atomic.io/network/config
        指定KEY的名称。

    "Network":"172.18.0.0/16",
        指定网段为"172.18.0.0/16"。

    "Backend": {"Type": "vxlan"}
        指定flannel的类型为"vxlan"。

温馨提示:   
    由于在flannel的配置文件中名为"FLANNEL_ETCD_PREFIX"的默认值为"/atomic.io/network",因此我们的需要手动指定该值的前缀,当然,该前缀咱们也可以自定义哟。

image-20210704223806743

4.重启服务

systemctl enable flanneld.service 
systemctl restart flanneld.service 
systemctl  restart  docker

测试不同node节点的容器是否可以互通:
    如下图所示,默认情况下是不会互通的,我们需要执行"iptables -P FORWARD ACCEPT"

image-20210704232410150

5.修改docker的启动脚本

(1)修改docker服务的启动脚本
vim /usr/lib/systemd/system/docker.service
#在[Service]区域下增加一行
ExecStartPost=/usr/sbin/iptables -P FORWARD ACCEPT

...

(2)使得文件生效并重启服务
systemctl daemon-reload && systemctl restart docker

温馨提示:
    这是docker的一个小bug,请在所有的节点上都执行上述操作,包括master节点,因为后续会用到它。

image-20210704232638809

6.监测容器的连通性

步骤略。

image-20210731201345602

六.配置master为镜像仓库

1.安装镜像仓库

(1)master节点安装docker
[root@10.0.0.101 ~]# yum -y install docker

(2)启动docker服务
[root@10.0.0.101 ~]# vim /etc/docker/daemon.json 
[root@10.0.0.101 ~]# 
[root@10.0.0.101 ~]# cat /etc/docker/daemon.json 
{
"registry-mirrors": ["https://registry.docker-cn.com"],
"insecure-registries": ["10.0.0.101:5000"]
}
[root@10.0.0.101 ~]# 
[root@10.0.0.101 ~]# systemctl restart docker && systemctl enable  docker

温馨提示:
    请在k8s集群上的所有节点都进行上述的初始配置,以避免后续上传镜像速度较慢。

image-20210704234037123

2.启动镜像容器

[root@10.0.0.101 ~]# docker container run -d -p 5000:5000 --restart=always --name registry -v oldboyedu_registry:/var/lib/registry  registry

image-20210704234813049

3.验证镜像容器是否正常工作

(1)上传镜像
docker image tag docker.io/alpine:latest 10.0.0.101:5000/alpine:latest
docker image push 10.0.0.101:5000/alpine:latest

(2)下载镜像
docker image pull 10.0.0.101:5000/alpine:latest

温馨提示:
    如下图所示,如果可以正常上传和下载镜像,说明咱们的镜像容器正常工作啦。

image-20210704235538067

七.常见的故障案例

1.failed to retrieve network config: 100: Key not found

故障原因:
    在etcd集群中为创建指定的key

解即方案:
    参考部署flannel网络插件中关于"修改etcd数据库信息"的相关实操。

image-20210704223529516

2.The connection to the server localhost:8080 was refused - did you specify the right host or port?

故障原因:
    未指定正确的Kubernetes API server。

解即方案:
    方案一:
        使用"-s"参数指定Kubernetes API server的地址。

    方案二:
        修改配置文件使之永久生效即可。

image-20210706231253972

谨此笔记,记录过往。凭君阅览,如能收益,莫大奢望。
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇