双显示器切换为单显示器后,软件窗口找不到
2021-02-21 software windows 1 mins 175 字
- 打开那个”丢失”的软件,不要做任何操作。
- 按 Alt+空格键,然后按 M 键。
- 再按住左方向键 ← 不要松手 (一般都是在隐藏在右边),大概等几秒它就应该从右边跑回来了。
- 最后点一下 鼠标左键 或按一下 回车键,就可以了。
集群联邦(Federation)的目的是实现单一集群统一管理多个Kubernetes集群的机制,这些集群可能是跨地区(Region),也可能是在不同公有云供应商上,或者是公司内部自行建立的集群。
一但集群进行联邦后,就可以利用Federation API资源来统一管理多个集群的Kubernetes API资源,如定义Deployment如何部署到不同集群上,其集群所需的副本数等。
通过集群联邦,我们可以:
这篇文章主要记录跨集群资源同步的内容,跨集群服务发现的开新的文章记录。
Federation v2 的安装分两个部分,一是 Controller Plan 和 kubefedctl。 其中 Controller Plan是基于 helm 安装的,所以我们先安装helm。
参考我先前的文章 《helm 的使用备忘》
Controller Plan 可以使用 Helm 部署(目前 Helm 还是使用 v2 版本),参考官方安装文档:https://github.com/kubernetes-sigs/kubefed/blob/master/charts/kubefed/README.md
$ helm repo add kubefed-charts https://raw.githubusercontent.com/kubernetes-sigs/kubefed/master/charts
$ helm search repo kubefed
$ helm --namespace kube-federation-system upgrade -i kubefed kubefed-charts/kubefed --version=0.6.1 --create-namespace
Release "kubefed" does not exist. Installing it now.
NAME: kubefed
LAST DEPLOYED: Wed Aug 5 16:03:46 2020
NAMESPACE: kube-federation-system
STATUS: deployed
REVISION: 1
TEST SUITE: None
kubefedctl 是一个二进制程序,可以在 Github 的 Release 页面找到最新版本的下载地址:https://github.com/kubernetes-sigs/kubefed/releases
$ wget https://github.com/kubernetes-sigs/kubefed/releases/download/v0.6.1/kubefedctl-0.6.1-linux-amd64.tgz
$ tar -zxvf kubefedctl-0.6.1-linux-amd64.tgz
$ mv kubefedctl /usr/local/bin/
参考我先前的文章 《kubernetes switch context》
kubectl config get-contexts
kubectl config use-context n1
kubectl config use-context context-cluster1-admin
基本使用方式为:
kubefedctl join <集群名称CLUSTER> --cluster-context <要接入集群的 context NAME> --host-cluster-context <HOST 集群的 context name>
例如:
kubefedctl join n1 --cluster-context n1 --host-cluster-context context-cluster1-admin --v=2
kubefedctl join n2 --cluster-context n2 --host-cluster-context context-cluster1-admin --v=2
kubefedctl unjoin n2 --cluster-context n2 --host-cluster-context context-cluster1-admin --v=2
Kubefed 是利用 CRD 来存储自己所需要的数据,因此当使用 kubefedctl join
后,可以在 host cluster 查看到集群信息:
$ kubectl -n kube-federation-system get kubefedclusters
kubefedctl join
命令只是将 Kubeconfig 里的配置转化为 KubeFedCluster
自定义资源存储到 kube-federation-system
命名空间中.
kubectl -n kube-federation-system get kubefedclusters -oyaml n1
对于 KubeFed 来说,资源管理分两类,一是资源的类型管理,另一个是被联邦(federated)的资源管理。
对于资源类型,kubefedctl 提供了 enable 来使新的资源可以被联邦管理:
kubefedctl enable <target kubernetes API type>
其中 可以使用以下的描述:
因为 Kubefed 是通过 CRD 管理资源,因此,当 enable 执行之后可以看到 Host Cluster 中新增了一种名为 federatedvirtualservices
的 CRD:
$ kubectl get crd | grep federated
默认已启用的联邦资源:
也可以对自定义CRD资源启用联邦。kubefedctl enable
完成了资源类型的管理,对于需要被联邦的资源管理编辑基于新创建的 CRD 展开的。
不过要部署资源之前,需要先创建 federatednamespaces
,多集群的资源只会部署到被 kubefed 管理的 namespace 中。
使用官方的demo,可以快速体验示例:https://github.com/kubernetes-sigs/kubefed/tree/master/example/sample1
kubectl apply -f example/sample1/namespace.yaml -f example/sample1/federatednamespace.yaml
kubectl apply -R -f example/sample1
注意,官方特地留了一个资源让我们手动enable,运行上面命令后会出现如下提示:
unable to recognize "example/sample1/federated<type>.yaml": no matches for kind "Federated<type>" in version "types.kubefed.io/v1beta1",
需要对ClusterRoleBinding 类型启用联邦化。
kubefedctl enable ClusterRoleBinding
kubectl apply -R -f example/sample1
最后在n1 n2集群上运行结果如下:
确认正常运行:
helm list --all-namespaces
// 安装集群
helm --namespace kube-federation-system-666 upgrade -i kubefed kubefed --version=0.3.0 --create-namespace
kubefedctl join <cluster name> --cluster-context <context name> --host-cluster-context <context name> --v=2
// context
kubectl config get-contexts
kubectl config use-context n1
kubectl config use-context context-cluster1-admin
// get cluster
kubectl -n kube-federation-system get kubefedclusters // 获得集群信息
kubectl api-resources | grep kubefed // 查看集群得api信息
$ helm --namespace kube-federation-system upgrade -i kubefed kubefed-charts/kubefed --version=0.6.1 --create-namespace
kubefedctl unjoin n1 --cluster-context n1 --host-cluster-context m1 --v=2
kubectl config get-contexts
// 卸载集群
kubectl -n kube-federation-system delete FederatedTypeConfig --all
helm --namespace kube-federation-system uninstall kubefed
最近使用的git客户端要求升级git,以前都是用源的方式安装,没办法更新到新版本的git。于是使用了源码安装。这篇文章记录debian下二进制安装的步骤。
在 https://github.com/git/git/releases 下载最新源码。目前是2.30.1版本。
wget https://github.com/git/git/archive/v2.30.1.tar.gz
tar zxvf v2.30.1.tar.gz
mv git-2.30.1 /var/local
apt-get install dh-autoreconf libcurl4-gnutls-dev libexpat1-dev gettext libz-dev libssl-dev install-info
cd /var/local/git-2.30.1
make prefix=/usr/local/git all
make prefix=/usr/local/git install
临时生效:
export PATH=/usr/local/git/bin:$PATH
永久生效:
# vim /etc/profile
# 在文件末尾,添加如下两行:
export GIT_HOME=/usr/local/git
export PATH=$GIT_HOME/bin:$PATH
# 退出vim,source生效
source /etc/profile
which git
git version
有可能需要修改linux和mac下的乱码
apt-get 工具可以使用 -o
参数来使用配置字符串,或使用 -c
参数使用指定配置文件。
http代理:
sudo apt-get -o Acquire::http::proxy="http://127.0.0.1:8000/" update
socks代理:
sudo apt-get -o Acquire::socks::proxy="socks5://127.0.0.1:1080/" update
创建个人配置文件~/apt_proxy.conf,内容:
Acquire::http::proxy "http://127.0.0.1:8087/";
Acquire::https::proxy "https://127.0.0.1:8087/";
使用命令:
sudo apt-get -c ~/apt_proxy.conf update
export APT_CONFIG=~/apt_proxy.conf
sudo apt-get update
我经常需要在多个 k8s 集群之间切换,可以使用配置文件来配置对多个集群的访问。有一点需要注意的是,kubectl 与集群的版本要一致,否则可能某些api的有变更导致结果与我们预期的不一致。
这篇文章记录切换不同集群的步骤。
kubectl config view
kubectl config get-contexts # 显示上下文列表
kubectl config current-context # 展示当前所处的上下文
kubectl config use-context my-cluster-name # 设置默认的上下文为 my-cluster-name
可以打开 ~/.kube/config
文件,默认是本集群的访问信息,文件结构默认如下:
apiVersion: v1
clusters:
- cluster:
certificate-authority: 某ca-file路径 # 也有可能是base64过后的信息, certificate-authority-data:
server: https://1.2.3.4:6443
name: cluster1
contexts:
- context:
cluster: cluster1
user: admin
name: context-cluster1-admin
current-context: ""
kind: Config
preferences: {}
users:
- name: admin
user:
client-certificate: 某cert-file路径 # 也有可能是base64过后的信息, client-certificate-data:
client-key: 某key-file路径 # 也有可能是base64过后的信息, client-key-data:
- name: experimenter
user:
password: some-password
username: exp
了解配置文件之后,就可以添加相关信息了。只要修改对应的配置name,不与当前配置冲突即可。
以下是我的例子。
apiVersion: v1
clusters:
- cluster:
certificate-authority-data: xxx
server: https://10.181.1.131:6443
name: cluster1
- cluster:
certificate-authority: /vagrant/n1.ca
server: https://10.181.2.131:6443
name: n1
- cluster:
certificate-authority-data: xxx
server: https://10.181.3.131:6443
name: n2
contexts:
- context:
cluster: cluster1
user: admin
name: context-cluster1-admin
- context:
cluster: n2
user: admin-n2
name: n2
- context:
cluster: n1
user: kubernetes-admin
name: n1
current-context: context-cluster1-admin
kind: Config
preferences: {}
users:
- name: admin
user:
client-certificate-data: xxx
client-key-data: xxx
- name: admin-n2
user:
client-certificate-data: xxx
client-key-data: xxx
- name: kubernetes-admin
user:
client-certificate: /vagrant/n1.crt
client-key: /vagrant/n1.key
然后就可以查看上下文信息了。
使用以下命令行切换即可:
kubectl config use-context n1
kubectl config use-context n2
记录一个 base64反解析为文件的用法:
将1,2,3的 value部分
反向base64还原,分别按顺序保存为 k8s-cluster.ca
k8s.crt
k8s.key
,三个文件,反向base64的命令如下:
echo '${替换内容}' | base64 -d
一般情况下使用 kubectl cluster-info dump
命令可以找到
获取service IP段
kubectl cluster-info dump | grep service-cluster-ip-range
获取 pod IP段
kubectl cluster-info dump | grep -m 1 cluster-cidr
如下图所示:
grep -C n serch # 显示查找文件中匹配serch字串那行以及上下n行
grep -B n serch # 显示查找文件中匹配serch字串那行以及前n行 before
grep -A n serch # 显示查找文件中匹配serch字串那行以及后n行 after