k8s 离线安装_K8s--02 K8S部署

K8s部署

一、实验环境准备

k8s实验环境准备:配置信息:主机名  IP地址       推荐配置     勉强配置node1     10.0.0.11    1C4G40G     1C2Gnode2     10.0.0.12    1C2G40G     1C1Gnode3     10.0.0.13    1C2G40G     1C1G初始化操作:干净环境关闭防火墙关闭SELinux配置时间同步配置主机名配置host解析更新好阿里源 确保网络通畅软件准备:harbor离线包 

二、k8s系统架构和组件介绍

从系统架构来看,k8s分为2个节点Master  控制节点  指挥官Node    工作节点  干活的

1.Master节点组成

API Server :提供k8s API接口主要处理Rest操作以及更新Etcd中的对象是所有资源增删改查的唯一入口。Scheduler:资源调度器根据etcd里的节点资源状态决定将Pod绑定到哪个Node上Controller Manager负责保障pod的健康存在资源对象的自动化控制中心,Kubernetes集群有很多控制器。Etcd这个是Kubernetes集群的数据库所有持久化的状态信息存储在Etcd中
bba63f291348ff42397288b9bd29922a.png

2.Node节点的组成

Docker Engine负责节点容器的管理工作,最终创建出来的是一个Docker容器。kubelet 安装在Node上的代理服务,用来管理Pods以及容器/镜像/Volume等,实现对集群对节点的管理。kube-proxy安装在Node上的网络代理服务,提供网络代理以及负载均衡,实现与Service通讯。
300aed571bc5ba6093d6a33f8f832726.png

三、k8s逻辑架构

从逻辑架构上看,k8s分为Pod Controller Service   

1.POD

  POD是k8s的最小单位  POD的IP地址是随机的,删除POD会改变IP  POD都有一个根容器  一个POD内可以由一个或多个容器组成  一个POD内的容器共享根容器的网络命名空间  一个POD的内的网络地址由根容器提供
2262c42dca479b57705adece5dbddc35.png

2.Controller

  用来管理POD  控制器的种类有很多  - RC Replication Controller  控制POD有多个副本  - RS ReplicaSet              RC控制的升级版  - Deployment                 推荐使用,功能更强大,包含了RS控制器  - DaemonSet                  保证所有的Node上有且只有一个Pod在运行  - StatefulSet       有状态的应用,为Pod提供唯一的标识,它可以保证部署和scale的顺序

3.Service

  NodeIP    CluterIP  POD IP  
4a41bd4f62c9d10b398d9b64bb63df6c.png

四、安装指定版本的docker

#安装部署docker1.设置国内YUM源[root@node1 ~]# cd /etc/yum.repos.d/[root@node1 ~]# wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo#查看源[root@node1 yum.repos.d]# ll总用量 12-rw-r--r-- 1 root root 1657 2月  25 12:10 CentOS-Base.repo-rw-r--r-- 1 root root 2640 2月  24 17:15 docker-ce.repo-rw-r--r-- 1 root root  954 2月  25 12:10 epel.repo2.安装指定的docker版本[root@node1 ~]# yum -y install docker-ce-18.09.7-3.el7 docker-ce-cli-18.09.73.设置docker使用阿里云加速[root@node1 ~]# mkdir /etc/docker[root@node1 ~]# cat > /etc/docker/daemon.json <
涉及到的命令ipvsadm -Ln#查看ipvs规则kubectl get pod#查看pod信息kubectl get pod -o wide#查看pod的详细信息 ip labelskubectl get pod -n kube-system -o wide#指定查看某个命名空间的pod的详细信息 kubectl get nodes#查看节点信息kubectl get nodes -o wide#查看节点详细信息kubectl -n kube-system edit cm kube-proxy #编辑某个资源的配置文件kubectl -n kube-system logs -f kube-proxy-7cdbn #查看指定命名空间里的指定pod的日志kubectl create -f kube-flannel.yml #根据资源配置清单创建相应的资源kubectl delete -f kube-flannel.yml   #删除资源配置清单相应的资源kubeadm reset #重置kubeadm节点kubeadm token create --print-join-command#打印出node节点加入master节点的命令kubeadm join 10.0.0.11:6443 --token uqf018.mia8v3i1zcai19sj     --discovery-token-ca-cert-hash sha256:e7d36e1fb53e59b12f0193f4733edb465d924321bcfc055f801cf1ea59d90aae  #node节点加入master的命令

五、安装部署kubeadm和kubelet

#部署kubeadm和kubelet注意!所有机器都需要操作!!!1.设置k8s国内yum仓库[root@node1 ~]# cat >/etc/yum.repos.d/kubernetes.repo< /etc/sysconfig/kubelet<  /etc/sysctl.d/k8s.conf </etc/sysconfig/modules/ipvs.modules<

六、初始化Master节点

初始化集群部署Master0.安装规划节点规划node1  master节点  API Server controlle  scheduler kube-proxy etcdnode2node3IP规划POD IP.      10.2.0.0 Cluster IP.  10.1.0.0 Node IP.     10.0.0.01.初始化命令 [root@node1 ~]# wget https://v1-16.docs.kubernetes.io/zh/docs/reference/setup-tools/kubeadm/kubeadm-init/#注意!只在node1节点运行!!![root@node1 ~]# kubeadm init --apiserver-advertise-address=10.0.0.11 --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.16.2 --service-cidr=10.1.0.0/16 --pod-network-cidr=10.2.0.0/16 --service-dns-domain=cluster.local --ignore-preflight-errors=Swap --ignore-preflight-errors=NumCPU执行完成后会有输出,这是node节点加入k8s集群的命令===============================================  mkdir -p $HOME/.kube  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config  sudo chown $(id -u):$(id -g) $HOME/.kube/config  ...  kubeadm join 10.0.0.11:6443 --token lb2q8w.knrkzvwg9vp8blqi     --discovery-token-ca-cert-hash sha256:b094543a3bbf748301b57b04d4722a246413646cbd698e427cbfdc4879f9bcd8  ===============================================2.为kubectl准备kubeconfig(初始化返回结果有显示)[root@node1 ~]# mkdir -p $HOME/.kube[root@node1 ~]# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config[root@node1 ~]# sudo chown $(id -u):$(id -g) $HOME/.kube/config3.获取node节点信息 [root@node1 ~]# kubectl get nodesNAME    STATUS     ROLES    AGE   VERSIONnode1   NotReady   master   15m   v1.16.4.支持命令补全[root@node1 ~]# yum install bash-completion -y[root@node1 ~]# source /usr/share/bash-completion/bash_completion[root@node1 ~]# source /etc/bash_completion.d/kubectl5.设置kube-proxy使用ipvs模式#执行命令,然后将mode: ""修改为mode: "ipvs"然后保存退出[root@node1 ~]# kubectl edit cm kube-proxy -n kube-systemconfigmap/kube-proxy edited#重启kube-proxy[root@node1 ~]# kubectl get pod -n kube-system |grep kube-proxy |awk '{system("kubectl delete pod "$1" -n kube-system")}'#查看pod信息[root@node1 ~]# kubectl get -n kube-system pod|grep "kube-proxy" kube-proxy-28rlx                1/1     Running   0          11s#检查日志,如果出现IPVS rr就表示成功(注意:最后要tab出来)[root@node1 ~]# kubectl -n kube-system logs -f kube-proxy-7xxxxI0225 08:03:57.736191       1 node.go:135] Successfully retrieved node IP: 10.0.0.11I0225 08:03:57.736249       1 server_others.go:176] Using ipvs Proxier.W0225 08:03:57.736841       1 proxier.go:420] IPVS scheduler not specified, use rr by default#检查IPVS规则[root@node1 ~]# ipvsadm -LnIP Virtual Server version 1.2.1 (size=4096)Prot LocalAddress:Port Scheduler Flags  -> RemoteAddress:Port           Forward Weight ActiveConn InActConnTCP  10.1.0.1:443 rr  -> 10.0.0.11:6443               Masq    1      0          0         TCP  10.1.0.10:53 rrTCP  10.1.0.10:9153 rrUDP  10.1.0.10:53 rr

七、部署网络插件flannel

部署网络插件1.部署Flannel网络插件git clone --depth 1 https://github.com/coreos/flannel.git#或者直接上传软件包[root@node1 ~]# ll总用量 7340-rw-------. 1 root root    1480 2月  24 22:23 anaconda-ks.cfg-rw-r--r--  1 root root 7505555 2月  25 16:29 flannel-master.zip-rw-r--r--. 1 root root     474 2月  24 22:28 host_ip.sh[root@node1 ~]# unzip flannel-master.zip 2.修改资源配置清单[root@node1 ~]# ll总用量 7344-rw-------.  1 root root    1480 2月  24 22:23 anaconda-ks.cfgdrwxr-xr-x  13 root root    4096 10月 31 23:22 flannel-master-rw-r--r--   1 root root 7505555 2月  25 16:29 flannel-master.zip-rw-r--r--.  1 root root     474 2月  24 22:28 host_ip.sh[root@node1 ~]# cd flannel-master/Documentation/#修改之前先备份[root@node1 Documentation]# cp kube-flannel.yml  /opt[root@node1 Documentation]# vim kube-flannel.yml [root@node1 Documentation]# egrep -n "10.2.0.0|mirror|eth0" kube-flannel.yml128:      "Network": "10.2.0.0/16",172:        image: quay-mirror.qiniu.com/coreos/flannel:v0.11.0-amd64186:        image: quay-mirror.qiniu.com/coreos/flannel:v0.11.0-amd64192:        - --iface=eth03.应用资源配置清单kubectl create -f kube-flannel.yml4.检查pod运行状态,等一会应该全是running[root@node1 ~]# kubectl -n kube-system get podNAME                            READY   STATUS    RESTARTS   AGEcoredns-58cc8c89f4-bzlkw        1/1     Running   0          77mcoredns-58cc8c89f4-sgs44        1/1     Running   0          77metcd-node1                      1/1     Running   0          76mkube-apiserver-node1            1/1     Running   0          76mkube-controller-manager-node1   1/1     Running   0          76mkube-flannel-ds-amd64-cc5g6     1/1     Running   0          3m10skube-proxy-7cdbn                1/1     Running   0          23mkube-scheduler-node1            1/1     Running   0          76m#注意:如果报错:在目录里操作:1: kubectl delete -f kube-flannel.yml2: cp kube-flannel.yml /opt3: rm -rf kube-flannel.yml4: 然后把包拖进来,修改5: kubectl create -f kube-flannel.yml6:kubectl -n kube-system get pod

八、kubeadm部署Node节点

部署Node节点1.在master节点上输出增加节点的命令(这条命令结果和初始化执行结果保存的一样)[root@node1 Documentation]# kubeadm token create --print-join-commandkubeadm join 10.0.0.11:6443 --token 6a81dl.1h4evnpbmu1phdu6     --discovery-token-ca-cert-hash sha256:b094543a3bbf748301b57b04d4722a246413646cbd698e427cbfdc4879f9bcd8 2.在node2和node3节点执行加入集群的命令 每个人的token不一样[root@node2 yum.repos.d]# kubeadm join 10.0.0.11:6443 --token 6a81dl.1h4evnpbmu1phdu6     --discovery-token-ca-cert-hash sha256:b094543a3bbf748301b57b04d4722a246413646cbd698e427cbfdc4879f9bcd8 [root@node3 ~]# kubeadm join 10.0.0.11:6443 --token 6a81dl.1h4evnpbmu1phdu6     --discovery-token-ca-cert-hash sha256:b094543a3bbf748301b57b04d4722a246413646cbd698e427cbfdc4879f9bcd8 3.在node1节点上查看状态[root@node1 Documentation]# kubectl get nodesNAME    STATUS   ROLES    AGE   VERSIONnode1   Ready    master   20m   v1.16.2node2   Ready       66s   v1.16.2node3   Ready       61s   v1.16.24.给节点打标签[root@node1 Documentation]# kubectl label nodes node2 node-role.kubernetes.io/node=node/node2 labeled[root@node1 Documentation]# kubectl label nodes node3 node-role.kubernetes.io/node=node/node3 labeled5.再次查看节点状态[root@node1 ~]# kubectl get nodesNAME    STATUS   ROLES    AGE    VERSIONnode1   Ready    master   171m   v1.16.2node2   Ready    node     27m    v1.16.2node3   Ready    node     27m    v1.16.2
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值