工作中的点点滴滴 2020-02-29
从系统架构来看,k8s分为2个节点 Master 控制节点 指挥官 Node 工作节点 干活的
API Server :提供k8s API接口 主要处理Rest操作以及更新Etcd中的对象 是所有资源增删改查的唯一入口。 Scheduler:资源调度器 根据etcd里的节点资源状态决定将Pod绑定到哪个Node上 Controller Manager 负责保障pod的健康存在 资源对象的自动化控制中心,Kubernetes集群有很多控制器。 Etcd 这个是Kubernetes集群的数据库 所有持久化的状态信息存储在Etcd中
![[k8s]-k8s入门 [k8s]-k8s入门](https://cdn.ancii.com/article/image/v1/V1/gl/_d/d_g1lVoFnaHF66uLvjLNgrNwLOlgxjAwTZLe7DAT3x2Fkl-mC2qtUeP2-EW08WgExcU1TCae8NuGaaABbOwkipRV-REy0NUQFDQqWwsnK2faDuzjadezJdbsAlKZ0HNLnqtblPv39W1JDLSqNppNZAu6QYviJn8CySXfMECb294.jpg)
Docker Engine 负责节点容器的管理工作,最终创建出来的是一个Docker容器。 kubelet 安装在Node上的代理服务,用来管理Pods以及容器/镜像/Volume等,实现对集群对节点的管理。 kube-proxy 安装在Node上的网络代理服务,提供网络代理以及负载均衡,实现与Service通讯。
![[k8s]-k8s入门 [k8s]-k8s入门](https://cdn.ancii.com/article/image/v1/V1/gl/_d/d_g1lVoFnaHF66uLvjLNgrNwLOlgxjAwTZLe7DAT3x2Fkl-mC2qtUeP2-EW08WgEk6O-o9p9k_4_BwK0LnxTWEKZr9EsnJOjMGxOlP7m5CbaDuzjadezJdbsAlKZ0HNLnqtblPv39W1JDLSqNppNZAu6QYviJn8CySXfMECb294.jpg)
从逻辑架构上看,k8s分为
Pod Controller Service
POD是k8s的最小单位 POD的IP地址是随机的,删除POD会改变IP POD都有一个根容器 一个POD内可以由一个或多个容器组成 一个POD内的容器共享根容器的网络命名空间 一个POD的内的网络地址由根容器提供
![[k8s]-k8s入门 [k8s]-k8s入门](https://cdn.ancii.com/article/image/v1/V1/gl/_d/d_g1lVoFnaHF66uLvjLNgrNwLOlgxjAwTZLe7DAT3x2Fkl-mC2qtUeP2-EW08WgEfXQiphTgrTo4J4Jhu3UxX-5o0b-8crMJVNd1GULr0UXaDuzjadezJdbsAlKZ0HNLnqtblPv39W1JDLSqNppNZAu6QYviJn8CySXfMECb294.jpg)
用来管理POD,控制器的种类有很多 - RC Replication Controller 控制POD有多个副本 - RS ReplicaSet RC控制的升级版 - Deployment 推荐使用,功能更强大,包含了RS控制器 - DaemonSet 保证所有的Node上有且只有一个Pod在运行 - StatefulSet 有状态的应用,为Pod提供唯一的标识,它可以保证部署和scale的顺序
NodeIP 对外提供用户访问 CluterIP 集群内部IP,可以动态感知后面的POD IP POD IP POD的IP
![[k8s]-k8s入门 [k8s]-k8s入门](https://cdn.ancii.com/article/image/v1/V1/gl/_d/d_g1lVoFnaHF66uLvjLNgrNwLOlgxjAwTZLe7DAT3x2Fkl-mC2qtUeP2-EW08WgEt1ySriSCqg4rNQQRH7u6fVOcZU3u-Rk0kTWUvf5Bl7_aDuzjadezJdbsAlKZ0HNLnqtblPv39W1JDLSqNppNZAu6QYviJn8CySXfMECb294.jpg)
主机名 IP地址 推荐配置 勉强配置 node1 10.0.0.11 1C4G40G 1C2G node2 10.0.0.12 1C2G40G 1C1G node3 10.0.0.13 1C2G40G 1C1G
干净环境 配置主机名 配置host解析 关闭防火墙 关闭SELinux 配置时间同步 更新好阿里源 确保网络通畅 关闭SWAP分区
cd /etc/yum.repos.d/ wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum -y install docker-ce-18.09.9-3.el7 docker-ce-cli-18.09.9-3.el7
mkdir /etc/docker
cat > /etc/docker/daemon.json <<EOF
{
"registry-mirrors": ["https://ig2l319y.mirror.aliyuncs.com"],
"exec-opts": ["native.cgroupdriver=systemd"]
}
EOFsystemctl enable docker && systemctl start docker
docker -v
注意!所有机器都需要操作!!!
注意!所有机器都需要操作!!!
注意!所有机器都需要操作!!!
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
yum install -y kubelet-1.16.2 kubeadm-1.16.2 kubectl-1.16.2 ipvsadm
cat > /etc/sysconfig/kubelet<<EOF KUBELET_CGROUP_ARGS="--cgroup-driver=systemd" KUBELET_EXTRA_ARGS="--fail-swap-on=false" EOF
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
systemctl enable kubelet && systemctl start kubelet
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
节点规划
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
注意!只在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
mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config
[ ~]# kubectl get nodes NAME STATUS ROLES AGE VERSION node1 NotReady master 15m v1.16.
yum install bash-completion -y source /usr/share/bash-completion/bash_completion source <(kubectl completion bash) kubectl completion bash >/etc/bash_completion.d/kubectl
执行命令,然后将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
注意!只在node1节点上安装部署!!!
注意!只在node1节点上安装部署!!!
注意!只在node1节点上安装部署!!!
git clone --depth 1 https://github.com/coreos/flannel.git
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
kubectl create -f kube-flannel.yml
[ ~]# 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
kubeadm token create --print-join-command
kubeadm join 10.0.0.11:6443 --token uqf018.mia8v3i1zcai19sj --discovery-token-ca-cert-hash sha256:e7d36e1fb53e59b12f0193f4733edb465d924321bcfc055f801cf1ea59d90aae
kubectl get nodes
[ ~]# kubectl label nodes node2 node-role.kubernetes.io/node= [ ~]# kubectl label nodes node3 node-role.kubernetes.io/node=
[ ~]# 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
###host字段指定授权使用该证书的etcd节点IP或子网列表,需要将etcd集群的3个节点都添加其中。cp etcd-v3.3.13-linux-amd64/etcd* /opt/k8s/bin/