技术流ken

运维拯救世界

课堂记录:k8s集群部署及架构分析(一)–技术流ken

部署k8s集群

 

三个节点

192.168.64.5 2G,2核,域名解析,关闭防火墙,关闭交换分区, docker

192.168.64.6 2G,2核,域名解析,关闭防火墙,关闭交换分区, docker

192.168.64.7 2G,2核,域名解析,关闭防火墙,关闭交换分区, docker

 

 

下面的步骤在k8s集群内所有节点进行操作

第一步:主机名解析

[root@ken1 ~]# cat /etc/hosts
127.0.0.1 localhost
192.168.64.5 ken1
192.168.64.6 ken2
192.168.64.7 ken3

 

 

第二步:关闭防火墙

l略

 

第三步:禁用交换分区

[root@ken1 ~]# swapoff -a
[root@ken1 ~]# free -h
              total        used        free      shared  buff/cache   available
Mem:           1.8G         87M        1.5G        8.6M        151M        1.5G
Swap:            0B          0B          0B
[root@ken1 ~]# cat /etc/fstab 

#
# /etc/fstab
# Created by anaconda on Wed Aug 14 15:30:02 2019
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/cl-root     /                       xfs     defaults        0 0
UUID=5ab6cfa4-d753-4d73-b3d6-ebf408b58b56 /boot                   xfs     defaults        0 0
#/dev/mapper/cl-swap     swap                    swap    defaults        0 0

 

第四步:安装docker

l略

[os]
name=os
enabled=1
gpgcheck=0
baseurl=https://mirrors.aliyun.com/centos/7/os/x86_64/

 

第五步:准备k8s安装源

[k8s]
name=k8s
enabled=1
gpgcheck=0
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/

 

 

第六步:下载程序包

 

[root@ken1 yum.repos.d]# yum install kubectl kubelet kubeadm -y

 

kubelet 实现pod创建

kubeadm 集群初始化

kubectl 命令行工作

 

 

第七步:kubelet开启自启

[root@ken3 ~]# systemctl enable kubelet

 

k8s集群初始化

 

在master节点运行如下的命令

 

第一步:初始化集群

kubeadm init --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.15.2 --apiserver-advertise-address 192.168.64.5 --pod-network-cidr=10.244.0.0/16

 

 

第二步:配置kubectl

[root@ken1 ~]#   mkdir -p $HOME/.kube
[root@ken1 ~]#   sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[root@ken1 ~]#   sudo chown $(id -u):$(id -g) $HOME/.kube/config

 

第三步:部署集群网络

[root@ken1 ~]# kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

 

第四步:启动kubelet

[root@ken1 ~]# systemctl restart kubelet

 

第五步:验证k8s集群

[root@ken1 ~]# kubectl get node
NAME   STATUS   ROLES    AGE   VERSION
ken1   Ready    master   25m   v1.15.2

 

 

在node节点运行如下的命令

第一步:把节点加入k8s集群

[root@ken2 yum.repos.d]# kubeadm join 192.168.64.5:6443 --token 2jhffu.phm38venu1n03efq \
>     --discovery-token-ca-cert-hash sha256:a6f754525e9911510839bb33abc4da1b36cb7197ff59fff644c516dc0968a65c 

想把那个节点加入到k8s集群当中,就执行上面的命令

 

第二步:验证节点是否已经加入到k8s集群

[root@ken1 ~]# kubectl get no
NAME   STATUS   ROLES    AGE     VERSION
ken1   Ready    master   30m     v1.15.2
ken2   Ready    <none>   2m51s   v1.15.2
ken3   Ready    <none>   100s    v1.15.2

 

删除集群中的节点

 

第一步:把相应的节点设置为维护模式

[root@ken1 ~]# kubectl drain ken3 --delete-local-data --force --ignore-daemonsets

 

第二步:删除相应的节点

[root@ken1 ~]# kubectl delete node ken3

 

第三步:查看节点

[root@ken1 ~]# kubectl get no
NAME   STATUS   ROLES    AGE    VERSION
ken1   Ready    master   36m    v1.15.2
ken2   Ready    <none>   9m1s   v1.15.2

 

再次添加相应的节点

 

第一步:停止kubelet运行

[root@ken3 ~]# systemctl stop kubelet

 

第二步:删除相关的文件

[root@ken3 ~]# rm -rf /etc/kubernetes/*

 

第三步:加入集群

[root@ken3 ~]# kubeadm join 192.168.64.5:6443 --token 2jhffu.phm38venu1n03efq    --discovery-token-ca-cert-hash sha256:a6f754525e9911510839bb33abc4da1b36cb7197ff59fff644c516dc0968a65c 

 

第四步:查看集群节点

[root@ken1 ~]# kubectl get no
NAME   STATUS   ROLES    AGE   VERSION
ken1   Ready    master   41m   v1.15.2
ken2   Ready    <none>   13m   v1.15.2
ken3   Ready    <none>   30s   v1.15.2

 

忘了token怎么再次加入集群那?

 

第一步:首先在master节点查看token master

[root@ken1 ~]# kubeadm token list
TOKEN                     TTL       EXPIRES                     USAGES                   DESCRIPTION                                                EXTRA GROUPS
2jhffu.phm38venu1n03efq   23h       2019-08-20T10:20:04+08:00   authentication,signing   The default bootstrap token generated by 'kubeadm init'.   system:bootstrappers:kubeadm:default-node-token

 

第二步:生成加密数据  master

[root@ken1 ~]# openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'
a6f754525e9911510839bb33abc4da1b36cb7197ff59fff644c516dc0968a65c

 

第三步:停止kubelet  node

[root@ken3 ~]# systemctl stop kubelet

 

第四步:删除kubenetes下面的数据 node

[root@ken3 ~]# rm -rf /etc/kubernetes/*

 

第五步:把节点再次加入到集群 node

[root@ken3 ~]# kubeadm join 192.168.64.5:6443 --token 2jhffu.phm38venu1n03efq    --discovery-token-ca-cert-hash sha256:a6f754525e9911510839bb33abc4da1b36cb7197ff59fff644c516dc0968a65c

 

第六步:重启kubelet node

[root@ken3 ~]# systemctl restart kubelet

 

第七步:查看节点  master

[root@ken1 ~]# kubectl get no
NAME   STATUS   ROLES    AGE   VERSION
ken1   Ready    master   47m   v1.15.2
ken2   Ready    <none>   19m   v1.15.2
ken3   Ready    <none>   14s   v1.15.2

 

 

 

master节点上运行的服务

1.api-server

2.schedule

3.控制器管理器

4.etcd

5.pod网络–fannel

 

node节点上运行的服务

 

1.kubelet 是k8s集群当中唯一一个不是以容器运行的客户端

2.kube-proxy

3.pod

 

运行pod有两种方式

 

1.通过kubectl命令行工具进行创建

2.通过yml文件

 

 

查看所有的namespace

[root@ken1 ~]# kubectl get ns
NAME              STATUS   AGE
default           Active   64m
kube-node-lease   Active   64m
kube-public       Active   64m
kube-system       Active   64m

 

查看某个namespace运行了那些pod

[root@ken1 ~]# kubectl get po -n kube-system
NAME                           READY   STATUS    RESTARTS   AGE
coredns-bccdc95cf-ggx7z        1/1     Running   0          63m
coredns-bccdc95cf-xxgjp        1/1     Running   0          63m
etcd-ken1                      1/1     Running   0          62m
kube-apiserver-ken1            1/1     Running   0          62m
kube-controller-manager-ken1   1/1     Running   0          62m
kube-flannel-ds-amd64-6qmv4    1/1     Running   0          16m
kube-flannel-ds-amd64-p8rkl    1/1     Running   0          38m
kube-flannel-ds-amd64-vnt8c    1/1     Running   0          35m
kube-proxy-4gqq7               1/1     Running   0          35m
kube-proxy-5n2f4               1/1     Running   0          63m
kube-proxy-fr262               1/1     Running   0          16m
kube-scheduler-ken1            1/1     Running   0          62m

 

查看更加完整信息

[root@ken1 ~]# kubectl get po -n kube-system -o wide
NAME                           READY   STATUS    RESTARTS   AGE   IP             NODE   NOMINATED NODE   READINESS GATES
coredns-bccdc95cf-ggx7z        1/1     Running   0          67m   10.244.0.3     ken1   <none>           <none>
coredns-bccdc95cf-xxgjp        1/1     Running   0          67m   10.244.0.2     ken1   <none>           <none>
etcd-ken1                      1/1     Running   0          66m   192.168.64.5   ken1   <none>           <none>
kube-apiserver-ken1            1/1     Running   0          66m   192.168.64.5   ken1   <none>           <none>
kube-controller-manager-ken1   1/1     Running   0          66m   192.168.64.5   ken1   <none>           <none>
kube-flannel-ds-amd64-6qmv4    1/1     Running   0          20m   192.168.64.7   ken3   <none>           <none>
kube-flannel-ds-amd64-p8rkl    1/1     Running   0          43m   192.168.64.5   ken1   <none>           <none>
kube-flannel-ds-amd64-vnt8c    1/1     Running   0          40m   192.168.64.6   ken2   <none>           <none>
kube-proxy-4gqq7               1/1     Running   0          40m   192.168.64.6   ken2   <none>           <none>
kube-proxy-5n2f4               1/1     Running   0          67m   192.168.64.5   ken1   <none>           <none>
kube-proxy-fr262               1/1     Running   0          20m   192.168.64.7   ken3   <none>           <none>
kube-scheduler-ken1            1/1     Running   0          66m   192.168.64.5   ken1   <none>           <none>

 

发表评论

电子邮件地址不会被公开。