kubenetes是一个全新的基于容器技术的分布式架构解决方案,并且是一个一站式的完备的分布式系统开发和支撑平台。
Master节点上运行着集群管理相关的一组进程:Kube-apiserver,Kube-controller-manager和 Kube-scheduler,这些进程实现了整个集群的资源管理、Pod调度、弹性伸缩、安全控制、系统监控和存储等管理功能。
Node节点上运行着kubelet,kube-proxy服务进程,这些进程负责Pod的创建、启动、监控、重启、销毁、以及实现软件模式的负载均衡器。
为什么使用K8S新技术的驱动
Docker容器化技术已经被很多公司采用,从单机走向集群已成必然,云计算的发展正在加速这一进程
全面拥抱微服务(微服务架构使得每个服务都可以独立开发,升级和扩展,因此系统具备很高的稳定性和快速迭代能力,开发者也可以自由选择开发技术。)
K8S提供的服务弹性扩容机制面对突发流量
概念和术语Master是集群管理的控制节点,基本上所有的命令都发给它,它负责具体的执行过程。
Node是K8s中的工作负载节点,每个node都会被master分配一些工作负载。
Pod是K8s最小运行单元。
Replication Controller (RC)副本控制,声明Pod的副本数量在任意时刻都符合某个预期值。
Deployment 在内部使用Replica Set(Replocation Controller的升级)实现部署。
Horizontal Pod Autoscaler(HPA) Pod横向自动扩容;指标:CUP,QPS,TPS。
StatefulSet 有状态服务。
Service 就是我们经常提起的微服务架构中的一个一个微服务。
安装K8S [kubeadm方式] 主机 类型 操作系统192.168.124.180 Master Centos 7
192.168.124.181 Node Centos 7
192.168.124.182 Node Centos 7
设置主机名 hostnamectl set-hostname master hostnamectl set-hostname node1 hostnamectl set-hostname node2 # 修改 /etc/hosts 192.168.124.180 master 192.168.124.181 node1 192.168.124.182 node2 关闭防火墙|禁用SELinux|关闭交换分区 # 禁用主机SELinux,让容器可以读取主机文件系统 setenforce 0 # 关闭防火墙 systemctl disable firewalld systemctl stop firewalld # #实时动态关闭交换分区 swapoff -a # 注释 swap 行 vim /etc/fstab Yum 国内源 cd /etc/yum.repos.d && \ sudo mv CentOS-Base.repo CentOS-Base.repo.bak && \ sudo wget -O CentOS-Base.repo && \ yum clean all && \ yum makecache 配置k8s资源的下载地址 cat <<EOF > /etc/yum.repos.d/kubernetes.repo [kubernetes] name=Kubernetes baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64 enabled=1 gpgcheck=0 repo_gpgcheck=0 gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg EOF 安装Docker并且替换Docker源
Docker 安装
# 换源 mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://registry.docker-cn.com"], "exec-opts": ["native.cgroupdriver=systemd"] } EOF service docker restart 安装K8S yum install kubelet kubeadm kubectl 下载k8s依赖镜像 获取依赖的镜像 kubeadm config images list 阿里云镜像下载k8s依赖组件 kubeadm config images list |sed -e 's/^/docker pull /g' -e 's#k8s.gcr.io#registry.cn-hangzhou.aliyuncs.com/google_containers#g' |sh -x docker images |grep registry.cn-hangzhou.aliyuncs.com/google_containers |awk '{print "docker tag ",$1":"$2,$1":"$2}' |sed -e 's#registry.cn-hangzhou.aliyuncs.com/google_containers#k8s.gcr.io#2' |sh -x docker images |grep registry.cn-hangzhou.aliyuncs.com/google_containers |awk '{print "docker rmi ", $1":"$2}' |sh -x 开机启动 systemctl enable docker && systemctl start docker systemctl enable kubelet && systemctl start kubelet 使用kubeadm安装Master kubeadm config print init-defaults > init.default.yaml kubeadm init --config=init.default.yaml 修改init.default.yaml apiVersion: kubeadm.k8s.io/v1beta2 bootstrapTokens: - groups: - system:bootstrappers:kubeadm:default-node-token token: abcdef.0123456789abcdef ttl: 24h0m0s usages: - signing - authentication kind: InitConfiguration localAPIEndpoint: # 修改为master的ip地址 advertiseAddress: 192.168.124.180 bindPort: 6443 nodeRegistration: criSocket: /var/run/dockershim.sock name: k8s-master taints: - effect: NoSchedule key: node-role.kubernetes.io/master --- apiServer: timeoutForControlPlane: 4m0s apiVersion: kubeadm.k8s.io/v1beta2 certificatesDir: /etc/kubernetes/pki clusterName: kubernetes controllerManager: {} dns: type: CoreDNS etcd: local: dataDir: /var/lib/etcd imageRepository: k8s.gcr.io kind: ClusterConfiguration # 修改版本为v1.17.2 kubernetesVersion: v1.17.2 networking: dnsDomain: cluster.local # 添加pod网段 podSubnet: "10.224.0.0/16" serviceSubnet: 10.96.0.0/12 scheduler: {} ### 使用ipvs ### yum install ipvsadm ### 查看 ipvsadm -Ln --- apiVersion: kubeproxy.config.k8s.io/v1alpha1 kind: KubeProxyConfiguration featureGates: SupportIPVSProxyMode: true mode: ipvs # 安装成功之后执行以下命令 To start using your cluster, you need to run the following as a regular user: mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config You should now deploy a pod network to the cluster. Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at: https://kubernetes.io/docs/concepts/cluster-administration/addons/ Then you can join any number of worker nodes by running the following on each as root: kubeadm join 192.168.124.180:6443 --token abcdef.0123456789abcdef \ --discovery-token-ca-cert-hash sha256:58056cdd9dfd9cc91da880adc63a2a7e9e7594eeda1bf7c2bcdceb0fbbf255ad 安装网络插件flannel