云原生技术容器编排学习(第五集)
Posted 技术能量站
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了云原生技术容器编排学习(第五集)相关的知识,希望对你有一定的参考价值。
1、系统环境
1.1 系统基本信息查看
// Linux查看版本当前操作系统内核信息
uname -a
// Linux查看当前操作系统版本信息
cat /proc/version
// Linux查看版本当前操作系统发行版信息
cat /etc/redhat-release
1.2 系统配置
// 设置主机名
hostnamectl set-hostname foxk8s
// 设置域名解析 host
cat <<EOF >>/etc/hosts
192.168.0.254 foxk8s
EOF
// 关闭防火墙 、selinux和swap
systemctl disable firewalld --now
setenforce 0
sed -i "s/^SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
swapoff -a
echo "vm.swappiness = 0">> /etc/sysctl.conf
sed -i 's/.*swap.*/#&/' /etc/fstab
sysctl -p
// 配置内核参数,将桥接的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
1.3 安装 kubelet, kubectl, kubeadm
在生产环境上,例如 centos linux系统上,使用 kubelet, kubectl, kubeadm 三件套可以部署 k8s 集群。
kubeadm不管kubelet和kubectl,所以我们需要手动安装kubelet和kubectl:
yum install -y kubeadm kubelet kubectl --disableexcludes=kubernetes
- Kubelet:负责与其他节点集群通信,并进行本节点Pod和容器生命周期的管理。
- Kubeadm:是Kubernetes的自动化部署工具,降低了部署难度,提高效率。
- Kubectl:是Kubernetes集群管理工具。
最后启动kubelet:
systemctl enable kubelet --now
2、部署节点
2.1 部署master (foxk8s) 节点
在安装过程中我们发现安装的是 1.16.2版本
kubeadm version
(1)镜像下载
执行 kubeadm config images list
命令就会输出如下所需版本
k8s.gcr.io/kube-apiserver:v1.16.2
k8s.gcr.io/kube-controller-manager:v1.16.2
k8s.gcr.io/kube-scheduler:v1.16.2
k8s.gcr.io/kube-proxy:v1.16.2
k8s.gcr.io/pause:3.1
k8s.gcr.io/etcd:3.3.15-0
k8s.gcr.io/coredns:1.6.2
(2)在master进行Kubernetes集群初始化
kubeadm init --kubernetes-version=1.16.2 \\
--apiserver-advertise-address=192.168.0.254 \\
--image-repository=registry.aliyuncs.com/google_containers \\
--service-cidr=10.1.0.0/16 \\
--pod-network-cidr=10.244.0.0/16
- –kubernetes-version: 用于指定k8s版本;
- –apiserver-advertise-address:用于指定kube-apiserver监听的ip地址,就是 master本机IP地址。
- –pod-network-cidr:用于指定Pod的网络范围; 10.244.0.0/16
- –service-cidr:用于指定SVC的网络范围;
- –image-repository: 指定阿里云镜像仓库地址
这一步很关键,由于kubeadm
默认从官网 k8s.grc.io
下载所需镜像,国内无法访问,因此需要
通过–image-repository
指定阿里云镜像仓库地址
集群初始化成功后返回如下信息:
记录生成的最后部分内容,此内容需要在其它节点加入Kubernetes集群时执行。
Your Kubernetes control-plane has initialized successfully!
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.0.254:6443 --token kehvmq.e33d33lgkrm8h0rn \\
--discovery-token-ca-cert-hash sha256:6150e7960c44890d5dd6b160bbbb4bfa256023db22f004b54d27e1cca72b0afc
根据以上结果,还要操作一些任务
(3)修改kubernetes服务 nodeport 类型的端口范围
只有 Kubernetes集群初始化 完成后才能修改端口范围
- 默认端口范围:30000-32767
- 如果只使用这些,那么不用修改
修改方法:https://blog.csdn.net/fenglailea/article/details/91869648
(4)配置kubectl工具
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
(5)部署flannel网络
cd ~
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml -O kube-flannel.yml
或
wget https://raw.githubusercontent.com/coreos/flannel/a70459be0084506e4ec919aa1c114638878db11b/Documentation/kube-flannel.yml -O kube-flannel.yml
kubectl apply -f kube-flannel.yml
来源:https://github.com/coreos/flannel
注意: 如果上面自定义了pod ip [–pod-network-cidr=10.244.0.0/16]
范围,这里需要修改·kube-flannel.ym·l的net-conf.json, 把 10.244.0.0 修改为 你改动的范围。
2.2 查看状态
- 查看 nodes
kubectl get nodes
如果你的环境迟迟都是NotReady状态,可以kubectl get pod -A看一下pod状态,一般可以发现问题,比如flannel的镜像下载失败啦~当node Ready的时候,我们可以看到pod也全部ready了: - 查看cs
kubectl get cs
伪集群状态检测
在master节点输入命令检查集群状态,返回如下结果则集群状态正常
kubectl get nodes
重点查看STATUS内容为Ready时,则说明集群状态正常。
2.3 创建Pod以验证集群是否正常。
kubectl create deployment nginx --image=nginx
kubectl expose deployment nginx --port=80 --type=NodePort
kubectl get pod,svc
如果是单机版请看后面的最后配置 单机版 k8s配置
// 测试删除nginx
kubectl delete pod nginx
kubectl delete svc nginx
// 启动和开机启动
#开机启动
systemctl enable kubelet
#启动
systemctl start kubelet
3、部署 dashboard
在master节点上进行如下操作
// 拉取镜像
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kubernetes-dashboard-amd64:v1.10.1
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kubernetes-dashboard-amd64:v1.10.1 k8s.gcr.io/kubernetes-dashboard-amd64:v1.10.1
3.1 创建Dashboard的yaml文件
wget https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.1/src/deploy/recommended/kubernetes-dashboard.yaml -O kubernetes-dashboard.yaml
sed -i "160a \\ \\ \\ \\ \\ \\ nodePort: 30001" kubernetes-dashboard.yaml
sed -i "161a \\ \\ type:\\ NodePort" kubernetes-dashboard.yaml
备注
s/k8s.gcr.io/loveone/g 因为墙,所以要更改能访问的
160a \\ \\ \\ \\ \\ \\ nodePort: 30001 增加外部访问端口
161a \\ \\ type:\\ NodePort 增加可外部访问
150行到164行代码如下
kind: Service
apiVersion: v1
metadata:
labels:
k8s-app: kubernetes-dashboard
name: kubernetes-dashboard
namespace: kube-system
spec:
ports:
- port: 443
targetPort: 8443
nodePort: 30001
type: NodePort
selector:
k8s-app: kubernetes-dashboard
3.2 部署dashboard
kubectl create -f kubernetes-dashboard.yaml
如果你部署错误了,那么可以删除 重新来过 kubectl delete -f kubernetes-dashboard.yaml
创建完成后,检查相关服务运行状态
kubectl get deployment kubernetes-dashboard -n kube-system
kubectl get pods -n kube-system -o wide
kubectl get services -n kube-system
ss -ntlp|grep 30001
3.3 浏览器访问
浏览器输入Dashboard访问地址:
https://192.168.0.254:30001
访问成功后,是要选择令牌的,填入 令牌 token 才能进入。令牌怎么来,看如下获取
3.4 查看设置访问Dashboard的认证令牌
// 创建 serviceaccount
kubectl create serviceaccount dashboard-admin -n kube-system
// 绑定 权限
kubectl create clusterrolebinding dashboard-cluster-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin
// 获取令牌
kubectl describe secrets \\
-n kube-system $(kubectl -n kube-system get secret | awk '/admin/print $1')
输出如下
====
priv: 1679 bytes
pub: 459 bytes
Name: kubernetes-dashboard-token-lhs57
Namespace: kube-system
Labels: <none>
Annotations: kubernetes.io/service-account.name: kubernetes-dashboard
kubernetes.io/service-account.uid: 0c9e6220-8d8f-11e9-8c09-4cedfbc99721
Type: kubernetes.io/service-account-token
Data
====
ca.crt: 1025 bytes
namespace: 11 bytes
token: eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJrdWJlcm5ldGVzLWRhc2hib2FyZC10b2tlbi1saHM1NyIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50Lm5hbWUiOiJrdWJlcm5ldGVzLWRhc2hib2FyZCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50LnVpZCI6IjBjOWU2MjIwLThkOGYtMTFlOS04YzA5LTRjZWRmYmM5OTcyMSIsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDprdWJlLXN5c3RlbTprdWJlcm5ldGVzLWRhc2hib2FyZCJ9.aQbqiVwqZvAIXuHSD72SNSqVSp55nkhy3YP_x_zV3ZMYQPW5geg_uH6OzCI11D5Iu_WJdFTl0rl9t12NfUkZWDiv9ghzoP-pDpJtKeEWZAq3pb_cLFyUmVcUsjuw7BNf0RUowBM3ukfYLHhwhNROjf-W6RAPj1Kp0O9xsMghDjMHZyASutz3XnmZvTrkDKvs-vTg-aSk9Jv6jt3Kat35_ufGVf80CJbhbPzd7CvaLS_03olv0veueup95Qm6mo5Mai1lYbaKeYGpC0hwi8aEpqZafni6MsxJWZt0sXZJiiclqJ7GoN9FRv1EXXGQ1Vcea6Ks7VQpDuz4woNhJdPppQ
要找到 kubernetes-dashboard的令牌token: 后面内容 就是需要的数据。
3.5 使用输出的token登录Dashboard
在浏览器中 选择令牌,把令牌 填入,点击登录,认证通过后,登录Dashboard首页
4、单机版 k8s
默认 Master Node不参与工作负载,所以 要配置让Master工作,请安如下2步操作
4.1 查看
kubectl describe node foxk8s | grep Taints
或
kubectl describe node -A | grep Taints
去掉 taint , 这样 单机 k8s 就能部署各种东东了
kubectl taint nodes --all node-role.kubernetes.io/master-
或
kubectl taint nodes foxk8s node-role.kubernetes.io/master-
再查看就好了,输出结果 Taints: <none>
kubectl describe node foxk8s | grep Taints
或
kubectl describe node -A | grep Taints
以上是关于云原生技术容器编排学习(第五集)的主要内容,如果未能解决你的问题,请参考以下文章
云原生容器技术 4 云原生容器技术概要介绍-容器编排技术基础-Kubernetes