[k8s]-k8s入门
第1章 k8s系统架构
从系统架构来看,k8s分为2个节点 Master 控制节点 指挥官 Node 工作节点 干活的
1.Master节点组成
API Server :提供k8s API接口 主要处理Rest操作以及更新Etcd中的对象 是所有资源增删改查的唯一入口。 Scheduler:资源调度器 根据etcd里的节点资源状态决定将Pod绑定到哪个Node上 Controller Manager 负责保障pod的健康存在 资源对象的自动化控制中心,Kubernetes集群有很多控制器。 Etcd 这个是Kubernetes集群的数据库 所有持久化的状态信息存储在Etcd中
2.Node节点的组成
Docker Engine 负责节点容器的管理工作,最终创建出来的是一个Docker容器。 kubelet 安装在Node上的代理服务,用来管理Pods以及容器/镜像/Volume等,实现对集群对节点的管理。 kube-proxy 安装在Node上的网络代理服务,提供网络代理以及负载均衡,实现与Service通讯。
第2章 k8s逻辑架构
从逻辑架构上看,k8s分为
Pod Controller Service
1.POD
POD是k8s的最小单位 POD的IP地址是随机的,删除POD会改变IP POD都有一个根容器 一个POD内可以由一个或多个容器组成 一个POD内的容器共享根容器的网络命名空间 一个POD的内的网络地址由根容器提供
2.Controller
用来管理POD,控制器的种类有很多 - RC Replication Controller 控制POD有多个副本 - RS ReplicaSet RC控制的升级版 - Deployment 推荐使用,功能更强大,包含了RS控制器 - DaemonSet 保证所有的Node上有且只有一个Pod在运行 - StatefulSet 有状态的应用,为Pod提供唯一的标识,它可以保证部署和scale的顺序
3.Service
NodeIP 对外提供用户访问 CluterIP 集群内部IP,可以动态感知后面的POD IP POD IP POD的IP
第3章 k8s实验环境准备
1.配置信息
主机名 IP地址 推荐配置 勉强配置 node1 10.0.0.11 1C4G40G 1C2G node2 10.0.0.12 1C2G40G 1C1G node3 10.0.0.13 1C2G40G 1C1G
2.初始化操作
干净环境 配置主机名 配置host解析 关闭防火墙 关闭SELinux 配置时间同步 更新好阿里源 确保网络通畅 关闭SWAP分区
第4章 安装指定版本的docker
1.配置阿里源
cd /etc/yum.repos.d/ wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
2.下载指定版本的docker
yum -y install docker-ce-18.09.9-3.el7 docker-ce-cli-18.09.9-3.el7
3.配置docker镜像加速
mkdir /etc/docker cat > /etc/docker/daemon.json <<EOF { "registry-mirrors": ["https://ig2l319y.mirror.aliyuncs.com"], "exec-opts": ["native.cgroupdriver=systemd"] } EOF
4.启动
systemctl enable docker && systemctl start docker
5.检查版本
docker -v
第5章 部署kubeadm和kubelet
注意!所有机器都需要操作!!!
注意!所有机器都需要操作!!!
注意!所有机器都需要操作!!!
1.设置k8s国内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
2.安装kubeadm
yum install -y kubelet-1.16.2 kubeadm-1.16.2 kubectl-1.16.2 ipvsadm
3.设置k8s禁止使用swap
cat > /etc/sysconfig/kubelet<<EOF KUBELET_CGROUP_ARGS="--cgroup-driver=systemd" KUBELET_EXTRA_ARGS="--fail-swap-on=false" EOF
4.设置内核参数
cat > /etc/sysctl.d/k8s.conf <<EOF net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 net.ipv4.ip_forward = 1 EOF sysctl --system
5.设置kubelet开机启动
systemctl enable kubelet && systemctl start kubelet
6.加载IPVS模块
cat >/etc/sysconfig/modules/ipvs.modules<<EOF #!/bin/bash modprobe -- ip_vs modprobe -- ip_vs_rr modprobe -- ip_vs_wrr modprobe -- ip_vs_sh modprobe -- nf_conntrack_ipv4 EOF chmod +x /etc/sysconfig/modules/ipvs.modules source /etc/sysconfig/modules/ipvs.modules lsmod | grep -e ip_vs -e nf_conntrack_ipv
第6章 初始化集群部署Master
0.安装规划
节点规划
node1 master节点 API Server,controlle,scheduler,kube-proxy,kubelet,etcd node2 node节点 Dokcer kubelet kube-proxy node3 node节点 Dokcer kubelet kube-proxy
IP规划
POD IP 10.2.0.0 Cluster IP 10.1.0.0 Node IP 10.0.0.0
1.初始化命令
注意!只在node1节点运行!!!
注意!只在node1节点运行!!!
注意!只在node1节点运行!!!
官网地址:
https://v1-16.docs.kubernetes.io/zh/docs/reference/setup-tools/kubeadm/kubeadm-init/
初始化命令:
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集群的命令kubeadm join 10.0.0.11:6443 --token 2an0sn.kykpta54fw6uftgq \ --discovery-token-ca-cert-hash sha256:e7d36e1fb53e59b12f0193f4733edb465d924321bcfc055f801cf1ea59d90aae
2.为kubectl准备kubeconfig
mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config
3.获取node节点信息
[ ~]# kubectl get nodes NAME STATUS ROLES AGE VERSION node1 NotReady master 15m v1.16.
4.支持命令补全
yum install bash-completion -y source /usr/share/bash-completion/bash_completion source <(kubectl completion bash) kubectl completion bash >/etc/bash_completion.d/kubectl
5.设置kube-proxy使用ipvs模式
执行命令,然后将mode: ""修改为mode: "ipvs"然后保存退出
kubectl edit cm kube-proxy -n kube-system
重启kube-proxy
kubectl get pod -n kube-system |grep kube-proxy |awk '{system("kubectl delete pod "$1" -n kube-system")}'
查看pod信息
kubectl get -n kube-system pod|grep "kube-proxy"
检查日志,如果出现IPVS rr就表示成功
[ ~]# kubectl -n kube-system logs -f kube-proxy-7cdbn I0225 08:03:57.736191 1 node.go:135] Successfully retrieved node IP: 10.0.0.11 I0225 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规则
[ ~]# ipvsadm -Ln IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 10.1.0.1:443 rr -> 10.0.0.11:6443 Masq 1 0 0 TCP 10.1.0.10:53 rr TCP 10.1.0.10:9153 rr UDP 10.1.0.10:53 rr
第7章 部署网络插件
注意!只在node1节点上安装部署!!!
注意!只在node1节点上安装部署!!!
注意!只在node1节点上安装部署!!!
1.部署Flannel网络插件
git clone --depth 1 https://github.com/coreos/flannel.git
2.修改资源配置清单
cd flannel/Documentation/ vim kube-flannel.yml egrep -n "10.2.0.0|mirror|eth0" kube-flannel.yml 128: "Network": "10.2.0.0/16", 172: image: quay-mirror.qiniu.com/coreos/flannel:v0.11.0-amd64 186: image: quay-mirror.qiniu.com/coreos/flannel:v0.11.0-amd64 192: - --iface=eth0
3.应用资源配置清单
kubectl create -f kube-flannel.yml
4.检查pod运行状态,等一会应该全是running
[ ~]# kubectl -n kube-system get pod NAME READY STATUS RESTARTS AGE coredns-58cc8c89f4-bzlkw 1/1 Running 0 77m coredns-58cc8c89f4-sgs44 1/1 Running 0 77m etcd-node1 1/1 Running 0 76m kube-apiserver-node1 1/1 Running 0 76m kube-controller-manager-node1 1/1 Running 0 76m kube-flannel-ds-amd64-cc5g6 1/1 Running 0 3m10s kube-proxy-7cdbn 1/1 Running 0 23m kube-scheduler-node1 1/1 Running 0 76m
第8章 部署Node节点
1.master节点输出增加节点的命令
kubeadm token create --print-join-command
2.node节点执行加入集群命令
kubeadm join 10.0.0.11:6443 --token uqf018.mia8v3i1zcai19sj --discovery-token-ca-cert-hash sha256:e7d36e1fb53e59b12f0193f4733edb465d924321bcfc055f801cf1ea59d90aae
3.在node1节点上查看状态
kubectl get nodes
4.给节点打标签
[ ~]# kubectl label nodes node2 node-role.kubernetes.io/node= [ ~]# kubectl label nodes node3 node-role.kubernetes.io/node=
5.再次查看节点状态
[ ~]# kubectl get nodes NAME STATUS ROLES AGE VERSION node1 Ready master 171m v1.16.2 node2 Ready node 27m v1.16.2 node3 Ready node 27m v1.16.2
相关推荐
XiaoMuFireAnt 2020-09-02
akcsdno 2020-07-21
xiunai 2020-06-28
薛正华 2020-06-21
JustHaveTry 2020-06-21
xingyuzhe 2020-06-10
hyxinyu 2020-06-10
xingyuzhe 2020-06-09
wishli 2020-06-08
JayFighting 2020-06-08
guan000 2020-06-05
wishli 2020-06-03
kunyus 2020-10-28
hubanbei00的家园 2020-10-25
btqszl 2020-10-21
shurenyun 2020-08-19
CurrentJ 2020-08-18
Dannyvon 2020-07-04
###host字段指定授权使用该证书的etcd节点IP或子网列表,需要将etcd集群的3个节点都添加其中。cp etcd-v3.3.13-linux-amd64/etcd* /opt/k8s/bin/
xiunai 2020-07-04
微微一笑 2020-06-12