k8s部署——简单易上手
四组基本概念Pod/Pod控制器pod是k8s能够运行的最小单元(原子单元)一个pod运行多个容器,他们共享UTS+NET+IPC名称空间(sidecar 边车模式)pod控制器是pod启动的一种模板,用来保证在k8s里启动的pod都按照预期运行(副本数,生命周期,健康状态检查)k8s提供了很多的pod控制器,常用的是DeploymentDaemonSet 。。。Name/N...
·
这里写目录标题
四组基本概念
Pod/Pod控制器
- pod是k8s能够运行的最小单元(原子单元)
- 一个pod运行多个容器,他们共享UTS+NET+IPC名称空间(sidecar 边车模式)
- pod控制器是pod启动的一种模板,用来保证在k8s里启动的pod都按照预期运行(副本数,生命周期,健康状态检查)
- k8s提供了很多的pod控制器,常用的是Deployment DaemonSet 。。。
Name/Namespace
- name 对应“资源”,每个“资源”都应该有它对应的名称。资源通常包括以下信息,api版本,类别,元数据,定义清单(spec),状态,等配置信息,name通常定义在资源的元数据中。
- k8s中隔离各种资源的方法是,名称空间,可以理解为虚拟集群组
- 不同名称空间的资源名可以相同,同一名称空间的同种资源名字不能重复
- k8默认的名称空间有 default、kube-system、kube-public 等,并且查询相应的资源要带上相应的名称空间
Lable/Lable选择器
- 一个资源对应多个标签,一个标签也可能对应多个资源,是多对多的关系。类似的还有注解
- 标签组成 key=value。
- 给资源打上标签后,可以通过标签选择器过滤标签
- 标签选择器目前有两个:1.基于等值关系,等于或者不等于,2.基于集合关系,属于,不属于,存在。
- 许多资源支持内嵌标签选择器:matchlable, matchexpressions
Service/Ingress
- 一个service可以看做是一组提供相同服务的pod的对外接口
- service作用于那些pod是根据标签选择器确定的
- service只能用于IPV4的调度:ip+port
- ingress是应用对外暴露的接口,作用于不同的业务域,不同url访问路径的业务流量
k8s核心组件
- 配置存储中心 ——》etcd服务
- 主控节点 ——》(master)节点
kube-apiserver服务
kube-controller-manage服务
kube-scheduler服务 - 运算节点 ——》(node)节点
kube-kubelet服务
kube-proxy服务 - CLI客户端——》
kubectl
k8s核心附件
- CNI网路插件 ——》flannel/calico
- 网路发现插件——》coredns
- 服务暴露插件——》traefik
- GUI管理插件——》Dashboard
k8s安装部署
MiniKube
可以直接使用官网的web版,打开下面链接,点击Launch Terminal
https://kubernetes.io/docs/tutorials/hello-minikube/
等待加载完毕,执行命令
kubectl get pods -n kube-system
结果如下:
这里可以看到k8s的一些关键组件已经全部安转完成。
kubeadmin部署(快速搭建)
前置条件
- 一台或多台机器,操作系统 CentOS7.x-86_x64
- 硬件配置:2GB或更多RAM,2个CPU或更多CPU,硬盘30GB或更多
- 集群中所有机器之间网络互通
- 可以访问外网,需要拉取镜像
- 禁止swap分区
1.准备环境(所有节点)
关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
关闭selinux:
sed -i 's/enforcing/disabled/' /etc/selinux/config
setenforce 0
关闭swap:
swapoff -a $ 临时
vim /etc/fstab $ 永久
将桥接的IPv4流量传递到iptables的链:
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system
安装docker
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
yum -y install docker-ce-18.06.1.ce-3.el7
systemctl enable docker && systemctl start docker
docker --version
添加阿里云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=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg EOF
安装kubeadm,kubelet和kubectl
yum install -y kubelet-1.15.0 kubeadm-1.15.0 kubectl-1.15.0
systemctl enable kubelet
sudo systemctl enable kubelet
sudo systemctl start kubelet
2.配置master节点
kubeadm init \
--apiserver-advertise-address=192.168.10.100 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.15.0 \
--service-cidr=10.1.0.0/16 \
--pod-network-cidr=10.244.0.0/16
注意:记录打印的最后一句话,如下
kubeadm join 192.168.10.100:6443 --token abcdef.0123456789abcdef \
--discovery-token-ca-cert-hash sha256:3546d6256e9c3ea1c8224f45637fedb90870b21b0ec41a355e2fb8de46d5962d
使用kubectl工具:
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
配置flannel网络
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
修改kube-flannel.yaml中的网络和kubeadm.conf中的podsubne一致
然后加载配置文件
kubectl apply -f kube-flannel.yml
等待status 变为 ready
kubectl get nodes
NAME STATUS ROLES AGE VERSION
k8s-master Ready master 24h v1.15.0
如果镜像拉取失败,手动拉取镜像
docker pull quay-mirror.qiniu.com/coreos/flannel:v0.11.0-amd64
docker tag quay-mirror.qiniu.com/coreos/flannel:v0.11.0-amd64 quay.io/coreos/flannel:v0.11.0-amd64
3.配饰node节点
将master中的admin.conf 拷贝到node中
scp /etc/kubernetes/admin.conf root@192.168.10.101:/home/wd/
在node中配置,并加入集群
mkdir -p $HOME/.kube
sudo cp -i $HOME/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
kubeadm join 192.168.10.100:6443 --token abcdef.0123456789abcdef \
--discovery-token-ca-cert-hash sha256:3546d6256e9c3ea1c8224f45637fedb90870b21b0ec41a355e2fb8de46d5962d
查看节点是否加入成功
[root@k8s-master wd]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
k8s-master Ready master 24h v1.15.0
k8s-node1 Ready <none> 24h v1.15.0
通过yaml文件部署应用
创建mysql_repl.yaml
apiVersion: v1
kind: ReplicationController
metadata:
name: mysql
spec:
replicas: 1 #Pod副本的期待数量
selector:
app: mysql #符合目标的Pod拥有此标签
template: #根据此模板创建Pod的副本(实例)
metadata:
labels:
app: mysql #Pod副本拥有的标签,对应RC的Selector
spec:
containers: #Pod内容器的定义部分
- name: mysql #容器的名称
image: hub.c.163.com/library/mysql #容器对应的Docker image
ports:
- containerPort: 3306 #容器应用监听的端口号
env: #注入容器内的环境变量
- name: MYSQL_ROOT_PASSWORD
value: "123456"
通过文件部署应用
部署命令
kubectl create -f mysql_repl.yaml
等待一段时间后查看
kubectl get pods
查看描述
kubectl describe pod mysql
此时mysql部署完成,但是外网无法访问
创建mysql_serc.yaml 文件
apiVersion: v1
kind: Service
metadata:
name: mysql
spec:
type: NodePort
ports:
- port: 3306
nodePort: 30001
selector:
app: mysql
部署
kubectl create -f mysql_serc.yaml
查看端口,此时端口映射完毕,查看外网端口
kubectl get service
配置webui(dashboard)
获取dashboard 的yaml文件
wget wget
https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.1/src/deploy/recommended/kubernetes-dashboard.yaml
修改文件
vim kubernetes-dashboard.yaml
修改镜像image字段如下
image: registry.aliyuncs.com/google_containers/kubernetes-dashboard-amd64:v1.10.1
修改service 的spec字段如下
spec:
ports:
- port: 443
targetPort: 8443
nodePort: 30000
selector:
k8s-app: kubernetes-dashboard
type: NodePort
运行文件
kubectl apply -f kubernetes-dashboard.yaml
查看端口映射情况,如下表示正常运行
kubectl -n kube-system get service
kube-dns ClusterIP 10.96.0.10 <none> 53/UDP,53/TCP,9153/TCP 24h
kubernetes-dashboard NodePort 10.102.240.20 <none> 443:30000/TCP 85
在火狐浏览器中访问 https://你的id:30000,会提示kubeconfig或者token
此时需要
创建一个SA Service Account
kubectl create serviceaccount dashboard-admin -n kube-system
创建一个Cluster rolebinding
kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin
//查看token 复制打印出的token,粘贴到浏览器中的token中就可以登录了
kubectl describe secrets -n kube-system $(kubectl -n kube-system get secret | awk '/dashboard-admin/{print $1}')
效果如下:以后我们可以直接webui控制k8s
至此k8s安装部署完成
更多推荐
已为社区贡献4条内容
所有评论(0)